【问题标题】:Remove a library from .libPaths() permanently without Rprofile.site在没有 Rprofile.site 的情况下从 .libPaths() 中永久删除一个库
【发布时间】:2013-03-05 07:05:14
【问题描述】:

如何在 R 中永久删除库?

.libPaths()
[1] "\\\\per-homedrive1.corp.riotinto.org/homedrive$/Tommy.O'Dell/R/win-library/2.15"
[2] "C:/Program Files/R/R-2.15.2/library"                                            
[3] "C:/Program Files/RStudio/R/library"     

第一项是我的公司“我的文档”文件夹,当在我正在制作的软件包上使用 R CMD INSTALL --build 时,我姓氏路径中的撇号会导致各种悲伤,更不用说使用已安装软件包的问题了当我从网络中脱机时在那里。

我想使用C:/Program Files/R/R-2.15.2/library 作为默认值,但我不想依赖Rprofile.site

我尝试过的

> .libPaths(.libPaths()[2:3])
> .libPaths()
[1] "C:/Program Files/R/R-2.15.2/library" "C:/Program Files/RStudio/R/library" 

这似乎有效,但只有在我重新启动我的 R 会话,然后我回到原来的 .libPaths() 输出...

Restarting R session...

> .libPaths()
[1] "\\\\per-homedrive1.corp.riotinto.org/homedrive$/Tommy.O'Dell/R/win-library/2.15"
[2] "C:/Program Files/R/R-2.15.2/library"                                            
[3] "C:/Program Files/RStudio/R/library" 

我想也许.libPaths() 正在使用R_LIBS_USER

> Sys.getenv("R_LIBS_USER")
[1] "//per-homedrive1.corp.riotinto.org/homedrive$/Tommy.O'Dell/R/win-library/2.15"

所以我尝试使用 Sys.unsetenv("R_LIBS_USER") 取消设置它,但它不会在会话之间持续存在。

附加信息

如果重要的话,这里有一些可能相关的环境变量...

> Sys.getenv("R_HOME")
[1] "C:/PROGRA~1/R/R-215~1.2"
> Sys.getenv("R_HOME")
[1] "C:/PROGRA~1/R/R-215~1.2"
> Sys.getenv("R_USER")
[1] "//per-homedrive1.corp.riotinto.org/homedrive$/Tommy.O'Dell"
> Sys.getenv("R_LIBS_USER")
[1] "//per-homedrive1.corp.riotinto.org/homedrive$/Tommy.O'Dell/R/win-library/2.15"
> Sys.getenv("R_LIBS_SITE")
[1] ""

我试过 Sys.unsetenv("R_LIBS_USER") 但这也不会在会话之间坚持

【问题讨论】:

  • 因为它是一个 R 字符值,我会建议尝试转义单引号。

标签: r


【解决方案1】:

只需将 Windows 中的环境变量 R_LIBS 设置为类似

R_LIBS=C:/Program Files/R/R-2.15.2/library

重启R。

【讨论】:

  • 设置这个路径变量对我有帮助:R_LIBS_USER
  • 一个工作示例如下所示 Sys.setenv(R_LIBS_USER = 'C:/Program Files/R/R-2.15.2/library')
  • 这只是将它附加到有问题的部分,而不是为我替换。我用this 回答解决了这个问题。
【解决方案2】:

这对问题的回答有点晚,但可能对其他人有用。 我命令设置自己的路径(并删除其中一条原始路径):

  • R中使用.libPaths()检查当前库路径
  • 确定要保留哪些路径。就我而言,它保留了 R 的原始库,但删除了指向我的文档的链接。
  • 使用R.home()Sys.getenv("R_HOME") 找到R-Home 路径;
    • R-Home\R-3.2.2\etc\Rprofile.site 在每次 R 内核启动时读取。因此,任何修改都将持续到 R 的每次运行
  • 编辑Rprofile.site,添加以下内容,

.libPaths(.libPaths()[2]) .libPaths("d:/tmp/R/win-library/3.2")

它是如何工作的?

  • 第一行删除除了一个路径(原始列表中的第二个)之外的所有路径,第二行添加了一个附加路径。我们最终有两条路。
  • 请注意,尽管使用 Windows,但我使用 Unix 路径表示法。 R 始终使用 Unix 表示法,与操作系统无关
  • 重新启动 R(使用 Ctr+Shift+F10

现在每次都可以使用。

【讨论】:

  • 这个答案真的很有帮助,但据我所知,在.libPaths(.libPaths()[2]) 之后执行.libPaths("d:/tmp/R/win‑library/3.2") 你只是在设置 "d:/tmp/R/win‑library/3.2" 作为路径,所以第一个设置将被覆盖。
  • 不是真的 - 我首先使用 '.libPaths(.libPaths()[2])' 删除除第二个路径之外的所有路径,然后添加 .libPaths("d:/tmp/R/win-library/3.2") 作为附加路径。我最终有两条路。
  • 不是很明显,我在原文中加了注释
  • ubuntu 上不是这样:运行 .libPaths(.libPaths()[2]) 不会删除其他库。
  • 至少对于 R 3.5.2,根据 .libPaths 帮助文档,它只会将参数添加到现有路径,而不是替换现有路径。 “如果使用参数 new 调用,则库搜索路径将设置为 unique(c(new, .Library.site, .Library)) 中的现有目录”
【解决方案3】:

.Rprofile中使用这个函数

set_lib_paths <- function(lib_vec) {
  lib_vec <- normalizePath(lib_vec, mustWork = TRUE)
  shim_fun <- .libPaths
  shim_env <- new.env(parent = environment(shim_fun))
  shim_env$.Library <- character()
  shim_env$.Library.site <- character()
  environment(shim_fun) <- shim_env
  shim_fun(lib_vec)
}
set_lib_paths("~/code/library") # where "~/code/library" is your package directory

原文来源:https://milesmcbain.xyz/hacking-r-library-paths/

【讨论】:

    【解决方案4】:

    我已将Sys.unsetenv("R_LIBS_USER") 命令放入我的Windows "own documents" 文件夹中的.Rprofile 文件中。似乎有帮助。我的问题是,在通过 vpn 连接时,处于活动目录环境中的 R 新贵和包加载速度非常慢。

    【讨论】:

      【解决方案5】:

      如果您想在RProfile 文件(@library/base/R/)中执行此操作,您可以搜索设置了R_LIBS_* 环境变量的行(例如Sys.setenv(R_LIBS_SITE=....)Sys.setenv(R_LIBS_USER=.....)) 也可以搜索代码.libPaths(),设置库树。因此,您可以根据需要在.libPaths() 调用之前通过注释、取消设置和设置R_LIBS 变量来实现您的目标。例如比如:

      Sys.unsetenv("R_LIBS")
      Sys.unsetenv("R_LIBS_USER")
      Sys.setenv(R_LIBS_SITE = "D:/R/libs/site")
      Sys.setenv(R_LIBS_USER = "D:/R/libs/user")
      Sys.setenv(R_LIBS = "D:/R/libs")
      

      【讨论】:

      • 自原始问题以来已经有一段时间了,但我刚刚完成了这项工作,需要放置 Sys.unsetenv("R_LIBS_USER") 行以使更改生效。点赞
      猜你喜欢
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 2020-12-26
      • 2010-12-18
      • 2013-06-15
      • 1970-01-01
      • 2016-01-08
      相关资源
      最近更新 更多