如何在R中永久更改.libPaths()?

42
无论何时我使用.libPaths()函数更改库路径顺序,如果我重新启动R,它都会恢复为默认设置。如何永久更改?我正在一个Linux计算集群上工作(我没有管理员权限),因此我想永久地将我的本地库添加到R中。
每次启动R时,我都必须这样做。
.libPaths(c("/home/...","/home...","/local/library"))

13
将其放入你的 .Rprofile 文件中。 - Joshua Ulrich
哦..如此简单的想法。谢谢。 - Koundy
@JoshuaUlrich的解决方案对于那些在计算机上没有管理员权限的人无效。 - Therkel
1
@Therkel:那是错误的。这对OP起作用,并且他们明确表示他们没有管理员权限。在您的.Rprofile中放置.libPaths不需要管理员权限。 - Joshua Ulrich
是的,您不需要任何管理员权限。只需将.Rprofile文件保存在默认工作目录中即可。 - Koundy
每个用户都可以编辑他们默认或主目录中的所有文件--因此在每个安装中编辑~/.Rprofile是a)可行的,b)比复制它更好。 - Dirk Eddelbuettel
4个回答

20

为了完整起见,因为我无法在评论中展示这个:

  1. 所有Debian和Ubuntu系统都默认安装了R包,并附带以下路径:

    edd@max:~$ R -q -e 'print(.libPaths())' R> print(.libPaths()) [1] "/usr/local/lib/R/site-library" "/usr/lib/R/site-library" [3] "/usr/lib/R/library"
    R> R>

  2. 我们可以通过修改R_LIBS_SITE来更改它:

    edd@max:~$ R_LIBS_SITE="/usr/lib/R/Library" R -q -e 'print(.libPaths())' R> print(.libPaths()) [1] "/usr/lib/R/library" R> R>

  3. 但是修改 R_LIBS 是不起作用的:

    edd@max:~$ R_LIBS="/usr/lib/R/Library" R -q -e 'print(.libPaths())' R> print(.libPaths()) [1] "/usr/local/lib/R/site-library" "/usr/lib/R/site-library" [3] "/usr/lib/R/library"
    R> R> edd@max:~$

请参阅help(Startup)以获取完整详细的处理方式。在Debian和Ubuntu上,我们已经将这三个目录设置为默认值超过十年。由于此处使用了R_LIBS_SITE,因此这就是您需要在此处更改的变量。一般来说,您需要覆盖保存值的变量,而您可能无法事先知道它是哪个。

关于原回答,对于Debian和Ubuntu操作系统,我们使用文件/etc/R/Renviron。如help(Startup)所述,您可以设置任何数量的方法来永久更改此项配置,而且所有不同的操作系统都适用以下几点:

  1. 如果您拥有适当的权限,请更改系统文件,例如RenvironRenviron.site
  2. 否则,请更改每个用户文件~/.Renviron
  3. 或者,在系统级别上更改环境变量R_LIBSR_LIBS_USERR_LIBS_SITE(如果您有适当的权限)
  4. 否则,请更改用户级别的变量R_LIBSR_LIBS_USERR_LIBS_SITE
  5. 最后,在您的R启动文件中调用.libPaths(...新路径在此处添加...),例如在.Rprofile中。

请查看help(Startup)以获取更全面的讨论。


就我个人而言,在这种情况下,我发现help(Startup)更令人困惑,而不是有帮助的。 - Brian D
2
我并没有声称这是易读的,因为有很多要考虑的移动部件,它确实如此。但它是全面的。这就是我说的全部。 - Dirk Eddelbuettel
@DirkEddelbuettel,您能否推荐一个类似的Windows软件?谢谢。 - ok1more
我展示了 R 代码,而且它们自然地在各种操作系统之间都是 可移植 的。如果你认为这只适用于 Linux 或 macOS,那就错了。请在你的 R 会话中查看 help(.libPaths)help(Startup),也许可以寻找一些关于“定制你的 R 环境”的教程或博客。Windows 用户也可以这样做。 - Dirk Eddelbuettel

9
在 R 安装文件夹中寻找名为 Rprofile 的文件(不带点)。
find -name Rprofile

#Getting something like:
#lib/R/library/base/R/Rprofile

打开文件并搜索:

invisible(.libPaths(c(unlist(strsplit(Sys.getenv("R_LIBS"), ":")),
                      unlist(strsplit(Sys.getenv("R_LIBS_USER"), ":") )
                      )))

注释掉其他路径并添加您所需的路径

invisible(.libPaths(c(#unlist(strsplit(Sys.getenv("R_LIBS"), ":")),
                      #unlist(strsplit(Sys.getenv("R_LIBS_USER"), ":") )
                      "/home/users/username/R/4.0.1/lib/R/library" # desired path
                      )))

这也很有用:(对于.bashrc文件)
export R_LIBS='/home/users/username/R/4.0.1/lib/R/library'
export R_LIBS_USER='/home/users/username/R/4.0.1/lib/R/library'

最好编辑 Rprofile.site 文件,因为它是用于 site-local 更改的。在升级过程中,这很重要。 - Dirk Eddelbuettel

5

两个主要解决方案:

  1. In .Rprofile you could leave code that sets .libPaths()

  2. Just set the appropriate environment variable such as R_LIBS in Windows or R_LIBS_SITE= in Linux, etc, to whatever you like, e.g.

     R_LIBS=C:/R/Library 
    

@DirkEddelbuettel 在什么情况下会出现这种情况?我只是引用stat.ethz.ch的话。 - Hack-R
任何Debian或Ubuntu系统。 - Dirk Eddelbuettel
@DirkEddelbuettel 哦,我明确指定了Windows。 - Hack-R
你甚至可以(应该)删除上面的“..在Windows中”的字眼,因为你的答案没有它也是正确的。 - Dirk Eddelbuettel
我没有要求你进行限定条件,只需删除每个操作系统的设置。两个操作系统都将侦听这两个变量,请参阅help(Startup) - Dirk Eddelbuettel

1
在 Mac 上,我发现在“新鲜”的安装中没有用户库,并且所有包都安装在特定版本的系统库中。最终,会创建一个用户库(可能是意外或通过 RStudio 提示),并将其设置为将来软件包安装的默认位置。因此,如果您不仔细注意,最终会导致一些软件包安装在系统库中,而另一些则安装在用户库中。
用户库列在第一位,系统库列在第二位:
.libPaths()
> [1] "/Users/<username>/Library/R/3.6/library"                         
> [2] "/Library/Frameworks/R.framework/Versions/3.6/Resources/library"

我喜欢把所有东西都放在一个地方(系统库)中,为了永久实现这一目标,我会执行以下操作:

在终端窗口中,在您的用户目录下创建一个.Rprofile文件:

nano ~/.Rprofile

在那个文件中,添加以下这行 R 代码:
.libPaths( c(.libPaths()[2], .libPaths()[1]) )

或者,添加一行类似的R代码,但包含硬编码路径:

.libPaths( c("/Library/Frameworks/R.framework/Versions/3.6/Resources/library", "/Users/<username>/Library/R/3.6/library") )

<username>替换为您的实际用户名。 然后Ctrl-O(保存)和Ctrl-X(退出)该文件。

任何一行都可以交换上面列出的路径的顺序,以便路径[2](系统)排在第一位(默认),路径[1](用户)排在第二位。

重要的是,通过将此行代码放入您的用户的.Rprofile中,每次启动R时都会运行它,这样您就不必再担心这个问题了。


令人沮丧的是,这个解决方案在一段时间后停止工作了。现在我的用户.Rprofile文件似乎被忽略了。 - Brian D
如果您在打开RStudio时没有管理员权限,那么这个解决方案似乎无法正常工作,或者根本不起作用。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接