【问题标题】:Change R default library path using .libPaths in Rprofile.site fails to work在 Rprofile.site 中使用 .libPaths 更改 R 默认库路径无法正常工作
【发布时间】:2013-02-16 16:50:43
【问题描述】:

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

我添加到Rprofile.site.libPaths 命令似乎没有任何效果!为什么会这样?或者更重要的是,我该如何解决这个问题,以便在不输入库位置的情况下安装和加载包?

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

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

这不是很奇怪吗?

【问题讨论】:

  • 您能否详细说明install.packages("zoo") 到底是如何不起作用的?错误信息等?
  • @joran 我在尝试install.packages("zoo") 时添加了错误消息---但这不是我真正的问题,这就是为什么Rprofile.site 中的.libPaths() 不起作用。跨度>
  • 如果你使用 RGui 而不是 R Studio,你是否也有同样的烦恼?
  • 为什么 R 的库路径默认为需要管理员权限的文件夹?!当然用户的主目录会更明智
  • superuser.com/questions/749283/… 编辑 ~/.Renviron R_LIBS_USER=/some/path

标签: r rstudio r-faq library-path


【解决方案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"  

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

【讨论】:

  • 我需要反转 c() 向量以确保新库进入自定义文件夹
  • 好点。事实上.libPaths-function 默认也有同样的效果。操作系统之间在处理尾部斜杠方面也存在差异。 (在 Windows 上不行)。存在其他选项。见?.libPaths
  • 新路径必须实际存在于文件系统中,否则不会添加到库路径中
  • 另一个好点。尽管函数名称另有说明,但您可以先检查file.exists,然后仅在路径不丢失时继续。
  • 我这样做了,它工作,但似乎我每次启动R时都必须更改路径。其他人也一样吗?
【解决方案2】:

由于这里的大多数答案都与 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 文件...完成 !!

【讨论】:

    【解决方案3】:

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

    要在 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 解决方案可以工作。在这种情况下,setting the default working directory to the directory that houses your Rprofile 就足够了。单击文件启动 RStudio 时,Rprofile 解决方案不起作用,因为这会将工作目录更改为远离默认工作目录。

    【讨论】:

    • 绝对是正确的解决方案。唯一的问题是,如果您的用户不是管理员(如果您一开始就遇到此问题,则可能是这种情况),您必须通过控制面板->用户帐户->用户帐户->更改我的环境来更改环境变量变量。
    • 你(碰巧)知道 Linux 命令行中的等价物吗?
    • 当然,只需将这些设置为您的 shell 变量(在 bash 中,您可以编辑 .bash_profile 和/或 .bashrc)。见这里:unix.stackexchange.com/questions/117467/…为当前会话设置这些只在控制台输入export R_LIBS_USER='directory_of_your_choice'
    • 神奇的解决方案!这在 Windows7 的 RStudio 中对我来说非常完美
    • 我没有通过控制面板设置变量,而是修改了Rprofile文件中R_LIB_USER的默认值。这里是解决方案:我想出了一个类似的方法,该解决方案作为这个问题的解决方案呈现在stackoverflow.com/questions/31707941/…
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

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

      3. 打开R(任意目录)查看,输入.libPaths(),你会发现你的libaray路径更新了!

      【讨论】:

        【解决方案6】:

        我找到了我认为的解决方案 here(感谢 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. 启动终端应用程序

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

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

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

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

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:
            getwd()
            # [1] "C:/Users/..../software/My R studio"
            

            用双引号复制上面的链接

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

            安装包的默认路径会改变

            【讨论】:

              【解决方案9】:

              【讨论】:

                【解决方案10】:

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

                【讨论】:

                  【解决方案11】:

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

                  【讨论】:

                    【解决方案12】:

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

                    .libPaths()

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

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

                    希望对你有帮助。

                    【讨论】:

                      【解决方案13】:

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

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

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

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

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

                      阅读help(Startup)很有用。

                      【讨论】:

                        【解决方案14】:

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

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

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

                        【讨论】:

                          【解决方案15】:

                          我设法通过将代码放在默认工作目录的.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 文件并将其作为 .Rprofile 保存在 getwd() 的文件夹中。
                          • @John 我相信我们说的是同一件事。
                          • R 从您的 HOME 目录而不是您的 CURRENT 目录中读取 .Rprofile。
                          • 我想出了一个类似的方法,该解决方案作为这个问题的解决方案呈现在stackoverflow.com/questions/31707941/…
                          • 要找到主目录,请在 r 控制台中发出 r 命令Sys.getenv("HOME")。我不确定您是否获得所需的输出。我认为所需的输出是 42 在他的回答 stackoverflow.com/a/15170774/754550 中显示的内容。他使用 .libPaths 的方式略有不同。
                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2015-10-20
                          • 1970-01-01
                          • 2020-03-30
                          相关资源
                          最近更新 更多