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

时间:2013-03-02 03:36:02

标签: r rstudio r-faq library-path

我在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的{​​{1}}命令似乎没有任何效果!为什么会这样?或者更重要的是,如何解决问题以便我可以在不输入库位置的情况下安装和加载包?

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

.libPaths()

这不奇怪吗?

15 个答案:

答案 0 :(得分:181)

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

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

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

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

如果始终通过单击RStudio快捷方式启动RStudio,则Rprofile解决方案可以正常工作。在这种情况下,setting the default working directory to the directory that houses your Rprofile就足够了。单击文件以启动RStudio时,Rprofile解决方案不起作用,因为这会将工作目录从默认工作目录更改。

答案 1 :(得分:137)

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

.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函数与大多数其他非图形函数略有不同。它通过副作用起作用。报告和更改R环境变量的函数Sys.getenvSys.setenv已被拆分,但.libPaths可以报告或更改其目标。

有关R启动过程的信息可以在?Startup帮助页面上阅读,并且有一个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/

答案 2 :(得分:19)

我设法通过将代码放在默认工作目录中的.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"

答案 3 :(得分:12)

答案 4 :(得分:9)

我发现我认为是一个解决方案here(谢谢你在SFU的Carl Schwarz)添加一个永久性的个人库(你不需要在每个会话中定义它),识别是否使用R或Rstudio ,Rstudio将其视为我的Mac机器上的默认设置。我没有看到它在SO上明确列出,所以我总结了他们为Windows提供的步骤,然后是Mac。

对于Windows 7操作系统:

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

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

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

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

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

  6. 再次点击“确定”

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

    对于Mac:

    1. 在“主页”或“用户名”目录中,创建名为 Rlibs

    2. 的文件夹
    3. 启动终端应用程序

    4. 输入:echo "R_LIBS=~/Rlibs"> .Renvrion确保大小写匹配。

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

    6. 确认已正确设置 .Renviron 文件:more .Renviron

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

答案 5 :(得分:8)

如果您没有管理员权限,打开位于 \ R-3.1.0 \ etc 中的Rprofile.site文件并添加:

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

这会直接在开始

评估.libPath()命令

答案 6 :(得分:4)

我真的很难理解这一点。当我上次重新安装我的操作系统时,gorkypl给出了正确的解决方案。 Rstudio但是这一次,设置我的环境变量并没有解决。

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

将R_LIBS_USER用户变量定义到您喜欢的目录(根据gorkypl的回答)并重新启动您的机器以加载用户变量。打开Rstudio,错误应该消失。

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

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

阅读help(Startup)很有用。

答案 7 :(得分:2)

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

.libPaths()

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

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

希望它有所帮助。

答案 8 :(得分:1)

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

答案 9 :(得分:1)

只需在没有管理员权限的目录中更改R库的默认文件夹,例如

.libPaths("C:/R/libs")

答案 10 :(得分:0)

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

使用双引号逗号复制上述链接

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

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

答案 11 :(得分:0)

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

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

  2. 类型 .libPaths(c( .libPaths(), "your new path" )) 在.Rprofile文件中,保存。

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

答案 12 :(得分:0)

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

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

答案 13 :(得分:0)

由于这里的大多数答案都与Windows和Mac OS有关(并且考虑到我也为此感到苦恼),因此我决定在我的 Arch Linux 上发布有助于解决此问题的过程设置。

步骤1:

  • 对系统进行全局搜索(例如 ANGRYSearch ),搜索术语Renviron(这是用于设置用户库设置的配置文件)。
  • 它应在以下目录路径中仅返回两个结果:
    1. /etc/R/
    2. /usr/lib/R/etc/
      注意: 存储在1和2(上方)的Renviron配置文件彼此热链接(这意味着对一个文件所做的更改将自动应用于[保存正在编辑的文件时与另一个文件具有相同的格式/结构-[[您还需要sudo权限才能保存文件的后编辑内容])

第2步:

  • 导航到第一目录路径(/etc/R/),然后使用您喜欢的文本编辑器打开Renviron文件。
  • Renviron文件内搜索R_LIBS_USER标记,并将花括号部分中的文本更新为所需的目录路径。

    示例:
    ... 更改自原始条目):
    R_LIBS_USER=${R_LIBS_USER-'~/R/x86_64-pc-linux-gnu-library/4.0'}
    ... 更改为您所需的条目):
    R_LIBS_USER=${R_LIBS_USER-'~/Apps/R/rUserLibs'}

第3步:

  • 保存刚刚编辑的Renviron文件... 完成

答案 14 :(得分:-1)

我正在研究这个问题,因为R在安装到默认位置时遇到问题,而只是将软件包放入temp文件夹中。它原来是Mcaffee Endpoint Security的最新更新,显然与R有问题。您可以在安装软件包时禁用威胁防护,它将正常工作。