我在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。站点文件并添加行
.libPaths("C:/software/Rpackages")
然而,在这样做并启动RStudio之后,这是我得到的输出
> .libPaths()
[1] "C:/Program Files/R/R-2.15.2/library" "C:/Program Files/RStudio/R/library"
我添加到Rprofile的. libpaths命令。网站似乎没有任何效果!为什么会这样呢?或者更重要的是,如何解决这个问题,以便在不输入库位置的情况下安装和加载包?
注意:如果我启动RStudio, .libPaths()命令似乎可以正常工作
.libPaths("C:/software/Rpackages")
> .libPaths()
[1] "C:/software/Rpackages" "C:/Program Files/R/R-2.15.2/library"
这不是很奇怪吗?
我通常尝试将所有的包保存在一个库中,但是如果您想添加一个库,为什么不将新的库(必须已经存在于您的文件系统中)附加到现有的库路径中呢?
.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函数与大多数其他非图形函数略有不同。它通过副作用起作用。Sys. Sys。getenv和Sys。setenv报告和改变R环境变量已经被分开,但是. libpaths可以报告或改变它的目标。
关于R启动过程的信息可以在启动帮助页面上阅读,在https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio上有RStudio材料
在您的案例中,RStudio似乎不尊重Rprofile。站点设置,或者通过从RStudio默认值之一读取. rprofile设置来覆盖它们。还应该提到的是,该操作的结果还将调用的内容追加到. library和. library。站点,这就是为什么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/