与平台无关的定位个人R库/库的方法

时间:2014-10-05 13:41:56

标签: linux r macos operating-system package

实际问题

即使在R_LIBS_USER.libPaths()等环境变量之后,如何查询R Installation and Adminstration中所述的个人包库/库的默认位置。用户可能已经改变了吗?

我想了解R究竟是如何以独立于平台的方式确定默认设置。

天真地,我希望得到与R.home("library")相当的东西,例如R.user("library")

尽职调查

我检查了这个post,答案排序包含了我想要检索的信息/路径。不幸的是,我只是真正了解Windows,而不是OS X或Linux。因此,我不确定在一般意义上(主目录,用户与系统范围之间的分离等)是否/多少是正确的:

OS X

/Library/Frameworks/R.framework/Resources/library

的Linux

/usr/local/lib/R/site-library
/usr/lib/R/site-library
/usr/lib/R/library

我也查看了manual,但这只给了我一个关于R如何处理这些事情的基本概念(可能只是看错了角落,任何指针都非常感激)。

背景

我有时会创建一个临时的,新鲜的软件包库,以便拥有一个"沙盒"用于系统测试(例如,计划升级某些软件包依赖项时)。

当我完成后,我想再次删除该库,同时确保我不会意外删除其中一个标准库(个人库/库和系统库) )。

为了这些目的,我开始整理一个名为libr的小包。函数deleteLibrary包含我当前的方法(第76行):

  ## Personal libs //
  r_vsn <- paste(R.version$major, gsub("\\..*", "", R.version$minor), sep = ".")
  if (.Platform$pkgType == "win.binary") {
    lib_p <- file.path(Sys.getenv("HOME"), "R/library", r_vsn)
  } else if (.Platform$OS.type == "mac.binary") {
    lib_p <- file.path(Sys.getenv("HOME"), "lib/R", r_vsn)
    ## Taken from https://stackoverflow.com/questions/2615128/where-does-r-store-packages
    ## --> Hopefully results in something like: '/Users/{username}/lib/R/{version}'
  } else if (.Platform$OS.type == "source" && .Platform$OS.type == "unix") {
    lib_p <- file.path(Sys.getenv("HOME"), 
      c(
        "local/lib/R/site-library", 
        "lib/R/site-library",
        "lib/R/library"
      ), r_vsn)

    ## Taken from https://stackoverflow.com/questions/2615128/where-does-r-store-packages
    ## --> Hopefully results in something like: 
    ##     '/usr/local/lib/R/site-library/{version}'
    ##     '/usr/lib/R/site-library/{version}'
    ##     '/usr/lib/R/library/{version}'
  } else {
    stop("Don't know what to do for this OS type")
  }

0 个答案:

没有答案