Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ubuntu上设置R_LIBS_站点,以便在启动时为所有用户正确设置.libpath()?_R_Packages - Fatal编程技术网

如何在Ubuntu上设置R_LIBS_站点,以便在启动时为所有用户正确设置.libpath()?

如何在Ubuntu上设置R_LIBS_站点,以便在启动时为所有用户正确设置.libpath()?,r,packages,R,Packages,我正在设置一个集群,其中所有节点都可以访问/nfs/software,因此安装.packages()的好地方应该在/nfs/software/R下。如何设置R\u LIBS\u站点,使其自动成为所有用户R环境的一部分?我尝试在/etc/R/Renviron中为R_LIBS_站点指定的路径做预加,但是帮助(启动)说“不要更改'R_HOME/etc/Renviron'本身”,我不确定这是同一个文件,因为R_HOME扩展到/usr/lib/R,但在任何情况下都没有效果。在各种Renviron.site

我正在设置一个集群,其中所有节点都可以访问
/nfs/software
,因此
安装.packages()
的好地方应该在
/nfs/software/R
下。如何设置
R\u LIBS\u站点
,使其自动成为所有用户R环境的一部分?我尝试在
/etc/R/Renviron
中为R_LIBS_站点指定的路径做预加,但是
帮助(启动)
说“不要更改'R_HOME/etc/Renviron'本身”,我不确定这是同一个文件,因为
R_HOME
扩展到
/usr/lib/R
,但在任何情况下都没有效果。在各种
Renviron.site
Rprofile.site
文件中创建条目似乎没有达到预期效果。我错过了什么


其他一些问题围绕着这个问题(也许还有其他问题),但人们似乎满足于在他们的
家中拥有一个特定于用户的库

确保您对要写入的目录拥有所有者和/或组写入权限

文件
/etc/R/Renviron.site
是本地覆盖
/etc/R/Renviron
的首选

另一种方法是简单地。。。安装软件包时强制使用目录。我倾向于在(bash而不是R)shell上通过从littler包中的一个示例派生的脚本来实现这一点:

$ cat bin/install.r 
#!/usr/bin/env r
#
# a simple example to install one or more packages

if (is.null(argv) | length(argv)<1) {

  cat("Usage: installr.r pkg1 [pkg2 pkg3 ...]\n")
  q()

}

## adjust as necessary, see help('download.packages')
repos <- "http://cran.us.r-project.org"
#repos <- "http://cran.r-project.org"

## this makes sense on Debian where no packages touch /usr/local
lib.loc <- "/usr/local/lib/R/site-library"

install.packages(argv, lib.loc, repos)

它将忠实地安装这些软件包及其附件。littler软件包有一个类似的脚本
update.r

跟踪Dirk Eddelbuettel(谢谢Dirk!)

对德克建议的改编,可在R:

# R function to install one or more packages
Rinstall <- function(pkg) {
  if (is.null(pkg) | length(pkg)<1) {
    q()
  }
  if(.Platform$OS.type == "windows") {
  lib.dir <- "c:/R/library"
  } else {
  lib.dir <- "~/R/library"
  }
  repos.loc <- "http://cran.us.r-project.org"
  install.packages(pkg, lib.dir, repos.loc, dependencies=c('Depends','Suggests'))  # make sure you get dependencies
}
当然,您希望根据您的系统调整repos.loc和lib.dir。当我在Windows和Linux机器上工作时,我还插入了一个条件语句来检查我在哪个系统上工作


另外,不要犹豫简化代码,我完全是个新手。

由于库文件夹
/nfs/software/R/i486 pc-linux-gnu-library/2.13
尚未创建,所以它失败了。编辑
R\u LIBS\u站点=
。在/etc/R/Renviron中排队似乎仍然是一条路要走。所需路径现在是
.libPaths()
中的第一个条目,但是
update.packages()
在第二个条目
/usr/local/lib/R/site library
中完成了它的工作。这里发生了什么?我终于意识到我必须登录到NFS服务器,在那里设置R,更改
/etc
文件,并从那里安装包,因为NFS根压缩。我相信德克在所有方面都是正确的,但我会继续我所做的,因为它似乎是有效的。谢谢你让我在这里记录下我的意识流,而我正在解决这个问题!我希望这对某人有帮助。在所有这些之后,我第一次尝试了
littler
,我得到了这样的结果:
$r-e“print(.libpath())”[1]“/usr/local/lib/r/site library”“/usr/lib/r/site library”[3]“/usr/lib/r/library”
在这方面,
r
的启动是否不同?在我没有
~/r/library/
的系统上,
r
Rscript
给出了相同的结果。另一方面,其中存在
~/R/library/
Rscript
将其添加到前面。
R
中可能有新的启动代码,但
R
没有。我倾向于不使用
~/R/library/
,因此当前的行为对我来说没有问题。请注意,在
/etc/R/Renviron.SITE
中设置R\u LIBS\u SITE意味着如果R以
--vanilla
标志启动,则不会遵守该设置。如果您想更永久地设置默认的
R_LIBS_站点
(因此即使是
--vanilla
),唯一的选择是将其设置在R之外(例如,
/etc/bashrc
),修改
/etc/R/Renviron
(违背官方建议,但似乎无害),或者使用指定的站点库从源代码构建R,可能认为
--prefix=
或类似。我认为您误解了
--vanilla
的用途:它意味着跳过init文件,通常也只是调试。在不同的
*.站点中设置选项是推荐的方式。
# R function to install one or more packages
Rinstall <- function(pkg) {
  if (is.null(pkg) | length(pkg)<1) {
    q()
  }
  if(.Platform$OS.type == "windows") {
  lib.dir <- "c:/R/library"
  } else {
  lib.dir <- "~/R/library"
  }
  repos.loc <- "http://cran.us.r-project.org"
  install.packages(pkg, lib.dir, repos.loc, dependencies=c('Depends','Suggests'))  # make sure you get dependencies
}
Rinstall(c("package1", "package2"))