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

Change R default library path using .libPaths in Rprofile.site fails to work

提问人:I Like to Code 提问时间:3/2/2013 最后编辑:zx8754I Like to Code 更新时间:11/16/2022 访问量:681140

问:

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

我添加到的命令似乎没有任何效果!为什么会这样?或者更重要的是,如何解决该问题,以便无需键入库位置即可安装和加载包?.libPathsRprofile.site

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

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

这不是很奇怪吗?

rstudio r-faq 库路径

评论

0赞 joran 3/2/2013
你能详细解释一下到底是如何不起作用的吗?错误消息等?install.packages("zoo")
1赞 I Like to Code 3/2/2013
@joran当我尝试时,我添加了错误消息---但这不是我真正的问题,这是关于为什么不起作用。install.packages("zoo").libPaths()Rprofile.site
1赞 Dason 3/2/2013
如果您使用 RGui 而不是 R Studio,您是否会遇到同样的麻烦?
7赞 geotheory 12/4/2015
为什么 R 的库路径默认为需要管理员权限的文件夹?!当然,用户的主目录会更明智
0赞 bowen.li 12/14/2017
superuser.com/questions/749283/......编辑~/。Renviron R_LIBS_USER=/some/path

答:

223赞 IRTFM 3/2/2013 #1

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

.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"  

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

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

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

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

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/
 

评论

13赞 geotheory 2/10/2015
我需要反转向量以确保新库进入自定义文件夹c()
0赞 IRTFM 2/11/2015
很好。事实上,默认情况下,-function 具有相同的效果。操作系统之间在处理尾部斜杠的方式上也存在差异。(在 Windows 上不行)。存在其他选项。看.libPaths?.libPaths
6赞 jarandaf 4/18/2015
新路径必须实际存在于文件系统中,否则不会添加到库路径中
0赞 IRTFM 5/14/2015
另一个好点。尽管函数名称另有说明,但只有在路径未丢失时,才能先检查并继续。file.exists
4赞 cyrusjan 5/20/2016
我这样做了并且它有效,但似乎每次启动 R 时都必须更改路径。其他人也一样吗?
27赞 I Like to Code 3/4/2013 #2

我设法通过将代码放在默认工作目录中的文件中来解决这个问题。.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"

评论

0赞 John 4/8/2014
这对我不起作用(BondedDust 的解决方案也不起作用)。我创建了一个txt文件并将其保存为.Rprofile 在 getwd() 的文件夹中。
2赞 I Like to Code 4/8/2014
@John我相信我们在说同样的话。
6赞 kgui 6/22/2016
R 读取 。Rprofile 来自您的 HOME 目录,而不是来自 CURRENT 目录。
0赞 Marco 3/7/2017
我想出了类似的方法,解决方案是作为这个问题的解决方案提出的 stackoverflow.com/questions/31707941/......
0赞 miracle173 3/15/2017
若要查找 home directroy,请在 r 控制台中发出 r 命令。我不确定你是否得到了想要的输出。我认为理想的输出是 42 在他的回答中显示的内容 stackoverflow.com/a/15170774/754550.他以一种略有不同的方式使用 .libPaths。Sys.getenv("HOME")
302赞 Paweł Rumian 10/29/2013 #3

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

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

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

如果由于某种原因您无法访问控制面板,您可以尝试在 Windows 上从命令行运行并从那里添加环境变量。rundll32 sysdm.cpl,EditEnvironmentVariables

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

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

评论

27赞 David Moye 3/3/2015
绝对是正确的解决方案。唯一的问题是,如果你的用户不是管理员(如果你一开始就遇到这个问题,可能会出现这种情况),你必须通过控制面板->用户帐户->用户帐户->更改我的环境变量来更改你的环境变量。
1赞 Diego-MX 4/9/2015
您(碰巧)知道 Linux 命令行中的等效项吗?
11赞 Paweł Rumian 4/9/2015
当然,只需将这些设置为您的 shell 变量(在 bash 中,您可以编辑和/或)。看这里: unix.stackexchange.com/questions/117467/...要仅为当前会话设置这些设置,请在控制台中键入.bash_profile.bashrcexport R_LIBS_USER='directory_of_your_choice'
0赞 Darwin PC 4/24/2015
神奇的解决方案!这在带有 Windows7 的 RStudio 中对我来说非常有效
6赞 Marco 3/7/2017
我没有通过控制面板设置变量,而是修改了 Rprofile 文件中的默认值 R_LIB_USER。这是解决方案:我想出了一个类似的方法,该解决方案作为这个问题的解决方案提出 stackoverflow.com/questions/31707941/......
9赞 schlusie 4/14/2014 #4

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

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

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

4赞 felixmc 1/8/2015 #5

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

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

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

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

要查看R_LIBS_USER设置为什么,请执行以下操作:?Sys.getenv()

阅读是有用的。help(Startup)

0赞 Sayed Mohammed Zeeshan 2/7/2016 #6
getwd()
# [1] "C:/Users/..../software/My R studio"

用双逗号复制上面的链接

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

安装包的默认路径将更改

2赞 Shivong Birla 3/14/2016 #7

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

.libPaths()

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

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

希望它有所帮助。

1赞 Supriya Deverkonda 7/8/2016 #8

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

13赞 Whalen 5/4/2017 #9

在这里找到了我认为的解决方案(感谢 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)并键入命令时,您应该会看到您创建的个人库以及 R 系统库。.libPaths()

对于 Mac:

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

  2. 启动终端应用程序

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

  4. 键入以查看目录中文件的完整列表,其中现在应包括 .伦夫里翁ls -a

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

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

-2赞 Kristen Bystrom 9/19/2017 #10

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

24赞 bowen.li 12/14/2017 #11

https://superuser.com/questions/749283/change-rstudio-library-path-at-home-directory

编辑~/。伦维隆

R_LIBS_USER=/some/path
5赞 Sébastien Wieckowski 11/14/2018 #12

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

.libPaths("C:/R/libs")
0赞 Pengyao 7/4/2019 #13

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

  1. 创造。Rprofile 在您的主目录下。(~/.Rprofile)

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

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

6赞 tzabal 11/29/2019 #14

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

touch ~/.Renviron
echo "R_LIBS_USER=/custom/path/in/absolute/form" >> ~/.Renviron
0赞 SilSur 9/25/2020 #15

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

步骤1:

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

步骤2:

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

    示例:
    ...更改自原始条目 ):

    ...更改为您想要的条目 ):
    RenvironR_LIBS_USERR_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
1赞 Seyma Kalay 3/12/2022 #16

我遇到了同样的问题,我遇到了这个问题。如果要创建另一个位置,也应该可以正常工作。如上所述,“您应该能够右键单击 Rstudio.exe 图标,单击”属性“,然后选择一个选项以始终以管理员身份运行 Rstudio。确保在要打开 Rstudio 时使用相同的图标。c("C:/Users/mynewlocation")

    myPaths <- .libPaths()   # get the paths
myPaths <- c(myPaths[2], myPaths[1])  # switch them
.libPaths(myPaths)  # reassign them