我在Windows上运行R,不是作为管理员.安装软件包时,以下命令不起作用:

> install.packages("zoo")
Installing package(s) into ‘C:/Program Files/R/R-2.15.2/library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  'lib = "C:/Program Files/R/R-2.15.2/library"' is not writable

要安装软件包,我必须指定库位置:

install.packages("zoo", lib="C:/software/Rpackages")

要加载包,我还必须指定库位置:

library("zoo", lib.loc="C:/software/Rpackages")

所有这些都没问题,但我想看看是否可以以某种方式向库路径添加C:/software/Rpackages,从而不必每次都键入它.

当我在网上搜索时,我发现一种方法是编辑Rprofile.site文件并添加行

.libPaths("C:/software/Rpackages")

然而,在完成这项工作并启动RStudio之后,我得到的就是这个输出

> .libPaths()
[1] "C:/Program Files/R/R-2.15.2/library" "C:/Program Files/RStudio/R/library" 

我添加到Rprofile.site.libPaths命令似乎没有任何效果!为什么会这样?或者更重要的是,我如何解决这个问题,以便在不键入库位置的情况下安装和加载软件包?

注意:如果我启动RStudio,.libPaths()命令似乎可以正常工作

.libPaths("C:/software/Rpackages")
> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"

这不是很奇怪吗?

推荐答案

我通常会try 将所有包保存在一个库中,但是如果您想添加一个库,为什么不将新库(它必须已经存在于您的文件系统中)附加到现有的库路径中呢?

.libPaths( c( .libPaths(), "~/userLibrary") )
 # obviously this would need to be a valid file directory in your OS
 # min just happened to be on a Mac that day

或者(这将使userLibrary成为第一个放置新包的地方):

.libPaths( c( "~/userLibrary" , .libPaths() ) )

然后我得到(至少在我最初写这篇文章的时候):

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/2.15/Resources/library"
[2] "/Users/user_name/userLibrary"  

.libPaths函数与大多数其他非图形函数略有不同.它通过副作用发挥作用.报告和更改R环境变量的函数Sys.getenvSys.setenv已被拆分,但.libPaths可以报告或更改其目标.

关于R启动过程的信息可以在?Startup帮助页面上阅读,RStudio资料在:https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio

在您的情况下,RStudio似乎不尊重Rprofile.网站设置,或者可能正在通过读取.Rprofile设置来自其中一个RStudio默认值.还应该提到的是,此操作的结果还将调用的内容附加到.Library.Library.site,这也是为什么RStudio(或任何其他安装的IDE或网络)托管的R可能表现出不同行为的进一步原因.

由于Sys.getenv()返回R进程的当前系统环境,因此可以通过以下方式查看库和其他路径:

Sys.getenv()[ grep("LIB|PATH", names(Sys.getenv())) ]

存储和访问软件包的两个关键点是(现在在Linux设备上有所不同):

R_LIBS_SITE                          /usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library
R_LIBS_USER                          /home/david/R/x86_64-pc-linux-gnu-library/3.5.1/
 

R相关问答推荐

for循环和if else在R中

使用geom_rect的带有事件注释的时间序列图

如何通过Exams2黑板对非整数字的问题进行评分

将收件箱变量传递给ggplot 2函数

使用case_when和Mutate搜索多个列以寻找条件

在ubuntu 22.04上更新到R4.4后包安装出现编译错误

self_函数无法工作--无法子集结束后的列

如果索引重复,聚合xts核心数据

查找具有平局的多个列的最大值并返回列名或平局 destruct 者NA值

r中的stat_difference函数不起作用

如何求解arg必须为NULL或deSolve包的ode函数中的字符向量错误

如何按排序顺序打印一个框架中所有精确的唯一值?

如何在R中合并和合并多个rabrame?

使用较长的查询提取具有部分匹配的列表中的较短目标,

如何使用tryCatch执行语句并忽略警告?

如何在R库GoogleDrive中完全删除预先授权的Google帐户?

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

ggplot斜体轴刻度标签中的单个字符-以前的帖子建议不工作

是否从列中删除★符号?

禁用时,SelecizeInput将变得不透明