在Rprofile.site中使用.libPaths更改R默认库路径无法正常工作


205

我在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" 

.libPaths我加入命令Rprofile.site似乎并没有有任何影响!为什么会这样呢?更重要的是,如何解决该问题,以便无需键入库位置即可安装和加载软件包?

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

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

那不是很奇怪吗?


您能否扩大一下到底install.packages("zoo")是怎么工作的?错误信息等?
joran

1
@joran我在尝试时添加了错误消息install.packages("zoo")---但这不是我真正的问题,这是为什么.libPaths()in Rprofile.site不起作用的原因。
我喜欢在

1
如果您使用RGui而不是R Studio,也会遇到同样的麻烦吗?
戴森

6
为什么R的库路径默认为需要管理员权限的文件夹?用户的主目录肯定会更明智
geotheory,2015年

superuser.com/questions/749283/…编辑〜/ .Renviron R_LIBS_USER = / some / path
bowen.li

Answers:


171

我通常会尝试将所有软件包都保存在一个库中,但是如果要添加一个库,为什么不将新库(文件系统中必须已经存在)添加到现有库路径中呢?

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

或者(这将使userLibrary成为放置新软件包的第一位):

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

然后我得到了(至少回到最初写此书时):

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

.libPaths功能与大多数其他非图形功能有所不同。它通过副作用起作用。这些函数Sys.getenv以及Sys.setenv报告和更改R环境变量的内容已分开,但.libPaths可以报​​告或更改其目标。

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

在您的情况下,似乎RStudio不遵守Rprofile.site设置,或者通过从RStudio默认值之一读取.Rprofile设置来覆盖它们。还应该提到的是,此操作的结果还将调用内容附加到.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/

12
我需要反转c()向量以确保新库进入自定义文件夹
geotheory,2015年

好点。实际上.libPaths,默认情况下-function具有相同的效果。操作系统之间在处理斜杠的方式方面也存在差异。(在Windows上不行)。存在其他选项。请参阅?.libPaths
IRTFM

5
新路径实际上必须存在于文件系统中,否则它将不会添加到库路径中
jarandaf 2015年

另一个好点。尽管函数名称另有建议,但您可以先进行检查,file.exists然后仅在路径不丢失的情况下继续操作。
IRTFM

3
我做到了,而且行得通,但似乎每次启动R都必须更改路径。对其他人也一样吗?
cyrusjan '16

213

正确的解决方案是将环境变量设置R_LIBS_USER为所需库文件夹的文件路径的值,而不是让RStudio识别Rprofile.site文件。

R_LIBS_USER在Windows中设置环境变量,请转到控制面板(系统属性->高级系统属性->环境变量->用户变量)为所需的值(库文件夹的路径),例如

Variable name: R_LIBS_USER 
Variable value: C:/software/Rpackages  

设置R_LIBS_USER将确保该库首先在.libPaths()中显示,而不管直接启动RStudio还是右键单击文件并单击“打开方式”启动RStudio。

如果始终通过单击RStudio快捷方式启动RStudio,则Rprofile解决方案可以工作。在这种情况下,将默认工作目录设置为Rprofile所在的目录就足够了。单击文件以启动RStudio时,Rprofile解决方案不起作用,因为这会将工作目录从默认工作目录更改为。


2
同意适当的解决方案!
felixmc 2014年

14
绝对是正确的解决方案。唯一的问题是,如果您的用户不是管理员(很可能是从这个问题开始的话),则必须通过“控制面板”->“用户帐户”->“用户帐户”->“更改我的环境”来更改环境变量变量。
David Moye

1
您(偶然)知道Linux命令行中的等效语言吗?
Diego-MX

5
当然,只需将它们设置为shell变量即可(在bash中,您可以编辑.bash_profile和/或.bashrc)。在这里看到:unix.stackexchange.com/questions/117467/... 设置这些对于当前会话只在控制台输入export R_LIBS_USER='directory_of_your_choice'
帕维尔Rumian

2
而不是通过控制面板设置变量,而是修改了Rprofile文件中R_LIB_USER的默认值。这里的解决方案:我想出了一个类似的方法,使溶液中呈现为解决这个问题stackoverflow.com/questions/31707941/...
马可

24

通过将代码放在.Rprofile默认工作目录中的文件中,我设法解决了该问题。

首先,我找到了默认工作目录的位置

> getwd()
[1] "C:/Users/me/Documents"

然后,我使用文本编辑器编写了一个.Rprofile包含以下行的简单文件

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

最后,当我启动R并运行时,将.libPaths()得到所需的输出:

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

这对我不起作用(BondedDust的解决方案也不对)。我创建了一个txt文件,并将其另存为getwd()中的.Rprofile文件。
约翰

2
@约翰,我相信我们在说同样的话。
我喜欢编码

3
R从您的HOME目录而非当前目录中读取.Rprofile 。
Crt

我想出了一个类似的方法,使溶液中呈现为解决这个问题stackoverflow.com/questions/31707941/...
马可

要找到本地目录Sys.getenv("HOME"),请在r控制台中发出r命令。我不确定您是否获得所需的输出。我认为期望的输出是42在他的答案stackoverflow.com/a/15170774/754550中显示的内容。他使用.libPaths的方式略有不同。
miracle173


11

我在这里发现了我认为的解决方案(感谢SFU的Carl Schwarz),以添加一个永久性的个人库(您不必在每次会话中都对其进行定义),以识别是否使用R或Rstudio,并且Rstudio将其视为在我的Mac机器上默认。我没有看到它在SO上明确地列出了这一点,所以我总结了它们为Windows和Mac提供的步骤。

对于Windows 7操作系统:

  1. 在要拥有个人库的驱动器上创建一个目录,例如C:\ User \ Rlibs(或您有权访问的另一个目录)

  2. 在Windows搜索栏中搜索/转到“为您的帐户编辑环境变量”以编辑控制面板设置

  3. 单击“环境变量”窗口中间的“新建...”

  4. 在“新用户变量”窗口中,为“变量名称” 键入R_LIBS,并输入创建的个人库目录的路径,例如C:\ User \ Rlibs

  5. 单击确定,您应该在用户变量窗口中看到变量/值对。

  6. 再次单击确定

现在,当您启动R(或Rstudio)并键入命令时,.libPaths()您应该会看到您创建的个人库以及R系统库。

对于Mac:

  1. 在“主目录”或“用户名”目录中,创建一个名为Rlibs的文件夹

  2. 启动终端应用程序

  3. 类型:echo "R_LIBS=~/Rlibs"> .Renvrion确保大小写匹配。

  4. 键入ls -a以查看目录中文件的完整列表,该目录现在应包含.Renvrion

  5. 验证.Renviron文件是否已正确设置:more .Renviron

启动R / Rstudio并键入.libPaths(),您应该会看到通往个人库的新路径。


8

如果您没有管理员权限,则打开\ R-3.1.0 \ etc中Rprofile.site-file 并添加以下内容也可能会有帮助:

.First <- function(){
  .libPaths("your path here")
}

这将.libPath()在启动时直接评估命令


4

我很难理解这一点。上次重新安装OS&Rstudio时,gorkypl提供了上述正确的解决方案,但是这次,设置环境变量无法解决。

卸载R和Rstudio,创建目录C:\ R和C:\ Rstudio,然后重新安装。

将R_LIBS_USER用户变量定义到您的首选目录(根据gorkypl的回答),然后重新启动计算机以加载User变量。打开Rstudio,错误应该消失了。

您也可以Sys.setenv()将R_LIBS_USER修改为备用库的路径,这更容易,不需要重新启动计算机。

要查看R_LIBS_USER设置为什么: ?Sys.getenv()

阅读help(Startup)很有用。


2

如果在安装新版本的R后或通过其他任何方式更改了默认软件包库,则可以在以下命令的帮助下附加这两个库以使用所有软件包。获取现有的库路径:

.libPaths()

现在,设置现有路径和旧路径:

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

希望能帮助到你。



1

我读了自述文件。他们提到在命令行中使用.libPaths()来检查其中存在哪些路径。我之前有2个库路径。当我在需要的地方使用命令.libpath(“ C:/ Program Files / R / R-3.2.4revised / library”)时,它更改了库路径。当我再次在命令行中输入.libPaths()时,它向我显示了正确的路径。希望这可以帮助


1

在Ubuntu上,建议的更改用户默认库路径的方法是R_LIBS_USER~/.Renviron文件中设置变量。

touch ~/.Renviron
echo "R_LIBS_USER=/custom/path/in/absolute/form" >> ~/.Renviron

0
getwd()
# [1] "C:/Users/..../software/My R studio"

用双引号逗号复制上面的链接

.libPaths(new="C:/Users/..../software/My R studio")

您的默认路径将更改以安装包装


0

如果要永久更改您的库路径(在输入R时无需每次都调用.libPath(),那么这对我有用:

  1. 在您的主目录下创建.Rprofile。(〜/ .Rprofile)

  2. 输入 .libPaths(c( .libPaths(), "your new path" )) .Rprofile文件,保存。

  3. 打开R(任何目录)并检查,只需键入.libPaths(),即可发现您的libaray路径已更新!


-1

我一直在研究这个问题,因为R在安装到默认位置时遇到了问题,而只是将软件包放入temp文件夹中。事实证明,这是Mcaffee Endpoint Security的最新更新,显然是R的问题。您可以在安装软件包时禁用威胁防护,然后它将正常运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.