【问题标题】:How do I change the default library path for R packages如何更改 R 包的默认库路径
【发布时间】:2015-10-20 21:01:47
【问题描述】:

我试图在我的工作计算机上的本地驱动器上安装 R 和 R studio,而不是在组织网络文件夹上,因为通过网络运行的任何东西都非常慢。安装时,目标路径显示它是我的本地 C:drive。但是,当我安装新软件包时,显示的默认路径是我的网络驱动器,并且没有选项可以更改:

.libPaths()
[1] "\\\\The library/path/I/don't/want"
[2] "C:/Program Files/R/R-3.2.1/library" 

我正在运行 Windows 7 专业版。如何删除库路径 [1] 并使路径 [2] 成为所有基本包和我安装的所有新包的主要路径?

【问题讨论】:

    标签: r


    【解决方案1】:

    请参阅help(Startup)help(.libPaths),因为您有几种可能已经设置好了。其中有

    • 设置R_LIBS_USER
    • .RprofileRprofile.site 中分配.libPaths()

    等等。

    在这种特殊情况下,您需要返回并取消设置 \\\\The library/path/I/don't/want 的设置。

    若要忽略它,您需要显式覆盖它,即通过

    library("somePackage", lib.loc=.libPaths()[-1])
    

    加载包时。

    【讨论】:

    • 非常感谢,我刚刚设置了 .libPaths("C:/Program Files/R/R-3.2.1/library") 现在这是显示的唯一路径。
    • 有趣。我认为这添加而不是覆盖?
    • 它肯定会添加到我的 Unix 机器上现有的 .libPaths()
    • 在帮助文件中似乎表明使用该命令设置库路径。类似于设置工作目录。我可能是错的,但这似乎是它对我的作用。第一个网络路径不再出现。问题是在安装基本包时,我必须在网络之外进行,否则默认情况下它会将程序保存在我的 C:Drive 上以及我们网络上的副本。我无法阻止将基础库保存在网络上,只能阻止我安装的任何其他软件包。
    • @DirkEddelbuettel 我相信这个功能不会添加到现有的.libPaths()。它采用指定的路径(或向量),如果不包含系统库路径,则附加它,然后设置。之前可能添加的任何其他路径,包括初始化过程中特定于用户的内容,都需要使用 .libPaths(c(mydir1,mydir2,.libPaths())) 或类似的方式显式保留。
    【解决方案2】:

    Windows 7/10:如果您的 C:\Program Files(或安装了 R 的任何位置)被阻止写入,就像我的一样,那么您将在编辑 RProfile.site 时感到沮丧(就像我所做的那样)。如上所述,我更新了R_LIBS_USER 并且它起作用了。然而,即使在多次阅读精美手册和广泛搜索之后,我也花了几个小时才完成这项工作。本着为别人节省时间的精神......

    假设您希望您的包驻留在C:\R\Library

    1. 创建文件夹C:\R\Library
    2. 点击Start --> Control Panel --> User Accounts --> Change my environmental variables
    3. Environmental Variables 窗口弹出。如果您看到R_LIBS_USER,请突出显示它并单击Edit。否则单击New。这两个操作都会打开一个窗口,其中包含 VariableValue 的字段。
    4. 在我的例子中,R_LIBS_USER 已经存在,并且值是我桌面的路径。我将创建的文件夹添加到路径中,如上所述用分号分隔。 C:\R\Library;C:\Users\Eric.Krantz\Desktop\R stuff\Packages。注意:我本可以删除桌面位置的路径,然后直接离开 C:\R\Library

    【讨论】:

    • 感谢您一步一步的操作,似乎在 Windows 10 中也适用于我。
    • 这对我有用,但我在某些包(tidyverse、sf、AER 到目前为止)中遇到错误:“程序入口点 EXTPTR_PTR 无法位于动态链接库中。”任何人明白了吗?
    • @winitheju :请参阅github.com/r-lib/rlang/issues/416sandJohnson 的说明
    【解决方案3】:

    面对同样的问题(避免网络中的默认路径),我根据其他答案中给出的提示提出了这个解决方案。

    解决方案是编辑Rprofile 文件以覆盖默认指向主目录的变量R_LIBS_USER

    步骤如下:

    1. 为库创建目标目标文件夹,例如, ~\target
    2. 找到Rprofile 文件。就我而言,它位于C:\Program Files\R\R-3.3.3\library\base\R\Rprofile
    3. 编辑文件并更改变量R_LIBS_USER 的定义。就我而言,我将这一行 file.path(Sys.getenv("R_USER"), "R", 替换为 file.path("~\target", "R",

    支持这个解决方案的文档是here

    原始文件:

     if(!nzchar(Sys.getenv("R_LIBS_USER")))
         Sys.setenv(R_LIBS_USER=
                    file.path(Sys.getenv("R_USER"), "R",
                              "win-library",
                              paste(R.version$major,
                                    sub("\\..*$", "", R.version$minor),
                                    sep=".")
                              )) 
    

    修改文件:

    if(!nzchar(Sys.getenv("R_LIBS_USER")))
         Sys.setenv(R_LIBS_USER=
                    file.path("~\target", "R",
                              "win-library",
                              paste(R.version$major,
                                    sub("\\..*$", "", R.version$minor),
                                    sep=".")
                              ))
    

    【讨论】:

    • 我最近在一台装有 Win 7 的机器上使用了该程序,但“~\target”不起作用,我不得不使用“~/target”。我从来没有正确理解为什么以及何时使用“/”或“\”很重要。
    【解决方案4】:

    网络上的 Windows 10

    将包存储在网络驱动器上会显着降低 R / R Studio 的性能,并且由于必须检索和推送数据的瓶颈,您需要花费大量时间等待库加载/安装通过服务器返回到本地主机。有关如何在本地计算机上创建 .RProfile 的说明,请参阅以下内容:

    1. 创建一个名为 C:\Users\xxxxxx\Documents\R\3.4 的目录(或您使用的任何 R 版本,以及您将存储本地 R 包的位置 - 您的目录位置可能与我的不同)
    2. 在 R 控制台上,键入 Sys.getenv("HOME") 以获取您的主目录(这是您的 .RProfile 将存储的位置,R 将始终在那里检查包 - 如果包存储在那里,则在网络上)
    3. 创建一个名为 .Rprofile 的文件并将其放入 :\YOUR\HOME\DIRECTORY\ON_NETWORK(在 R 控制台中输入 Sys.getenv("HOME") 后得到的目录)
    4. .Rprofile 的文件内容应该是这样的:

    #search 2 places for packages- install new packages to first directory- load built-in packages from the second (this is from your base R package- will be different for some)

    .libPaths(c("C:\Users\xxxxxx\Documents\R\3.4", "C:/Program Files/Microsoft/R Client/R_SERVER/library"))
    
    message("*** Setting libPath to local hard drive ***")
    

    #insert a sleep command at line 12 of the unpackPkgZip function. So, just after the package is unzipped.

    trace(utils:::unpackPkgZip, quote(Sys.sleep(2)), at=12L, print=TRUE)
    
    message("*** Add 2 second delay when installing packages, to accommodate virus scanner for R 3.4 (fixed in R 3.5+)***")
    

    # fix problem with tcltk for sqldf package: https://github.com/ggrothendieck/sqldf#problem-involvling-tcltk

    options(gsubfn.engine = "R")
    
    message("*** Successfully loaded .Rprofile ***")
    
    1. 重新启动 R Studio 并确认您看到上面的消息已显示。

    现在您可以在本地主机上享受更快的应用程序性能,而不是在网络上存储包并减慢一切速度。

    【讨论】:

    • 另外,如果您在加载软件包时遇到问题,您可能需要进一步增加时间以适应 R 3.4 的病毒扫描程序(已在 R 3.5+ 中修复):trace(utils:::unpackPkgZip, quote(Sys.sleep(20)), at=12L, print=TRUE)message("*** Add 20 second delay when installing packages, to accommodate virus scanner for R 3.4 (fixed in R 3.5+)***")跨度>
    【解决方案5】:

    我为此苦苦挣扎了一段时间,因为我的工作计算机(使用 Windows 10)在网络驱动器上创建了默认用户库,这会使 R 和 RStudio 减慢到无法使用的状态。

    如果这对某人有帮助,这是我找到的最简单的方法,不需要管理员权限:

    • 确保要安装软件包的目录存在。如果您想遵守约定,请使用:C:\Users\username\R\win-library\rversion(例如:C:\Users\janebloggs\R\win-library\3.6
    • 在您的主目录(可能在网络驱动器上?)中创建一个.Renviron 文件,并在其中编写一行将R_LIBS_USER 变量定义为您的自定义路径:

    R_LIBS_USER=C:\Users\janebloggs\R\win-library\3.6

    (也可以随意添加cmets,以#开头的行)

    如果存在.Renviron 文件,R 将在启动时读取它并使用其中定义的变量,然后再运行.Rprofile 中的代码。你可以在help(Startup)阅读它。

    现在它应该在会话之间保持不变!

    【讨论】:

    • 这是在几台不同的计算机(我自己的和工作的)上对我有用的唯一解决方案 - 这也可以是选定的答案吗?
    • @ChrisP :不可能有几个“打勾”的答案,不,尽管提出问题的人可以改变主意。当前选择的答案确实(模糊地)涵盖了我的答案,提到 R_LIBS_USER 变量可以手动定义。遗憾的是,它没有被强调为最直接的持久解决方案。
    【解决方案6】:

    经过几个小时尝试以多种方式解决问题(其中一些在此处进行了描述)对我而言(在 Win 10 上)创建 Renviron 文件的选项有效,但与此处所写的内容略有不同以上。

    任务是更改变量 R_LIBS_USER 的值。要做到这一点,需要两个步骤:

    1. 在文件夹 \Program\etc\ 中创建名为 Renviron 的文件(不带点)(Program 是安装 R 的目录 - 例如,对我来说它是 C:\Program Files\R\R-4.0。 0\等)
    2. 在 Renviron 中使用新路径插入一行:R_LIBS_USER = "C:/R/Library"

    之后,重启 R 并使用.libPaths() 确认默认目录已更改。

    【讨论】:

    • 对我来说,问题是即使在更改文件资源管理器设置以显示隐藏文件后,我也无法在我的 PC 上创建或找到 .Renviron 文件。解决方案是使用versions 软件包安装旧版本的usethis 软件包,然后使用usethis::edit_r_environ() 通过添加以下行来编辑.Renviron 文件:R_LIBS_USER = "C:/target/directory",其中目标目录位于您的任何位置想要将.libPaths() 映射到而不是网络驱动器。
    • 如果您的计算机上有多个版本的 R——通常将包存储在不同的子文件夹中——修改 .Renviron 会将所有版本定向到同一个文件夹,这可能会导致与各种包的兼容性问题和他们的依赖。解决方法是为每个版本创建多个子文件夹(例如 "C:/R/Library/3.5"C:/R/Library/4.0",然后在 R_LIBS_USER 语句的末尾使用 %vR_LIBS_USER = C:/R/Library/%v。这样,无论您打开哪个版本的 R 都会加载包来自相应的子文件夹。
    • @coip 两个简短的感谢和详细说明:(1)对于那些不方便使用环境文本的人,%v 可以放在字符串中的任何位置,例如 C:/R/% v/Library,虽然使用默认结构可能更好; (2) %v 也非常优雅,因为如果您将包保存到与 R 版本不同的默认目录,这可能会导致操作问题,因为根据定义,任何“基础”包都将从版本中提取R,不是您的默认值,这可能会导致操作冲突。使用 %v 可以让你的包始终保持和谐
    【解决方案7】:

    我想我尝试了以上所有方法,但它对我不起作用。不过,这行得通:

    1. 在主目录中,创建一个名为“.Renviron”的文件

    2. 在那个文件中,写:

       .libPaths(new = "/my/path/to/libs")
      
    3. 如果你打开了 R,保存并重新启动它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多