R语言 仅下载包和所有依赖项的源代码

zour9fqk  于 2023-04-18  发布在  其他
关注(0)|答案(4)|浏览(149)

我想知道是否有一种方法可以使用install.packages()或其他相关函数来执行以下操作:* 仅下载指定软件包的源代码 *(即tar.gz文件)及其所有依赖项到指定文件夹(在Windows上)。
这样做的一个原因是:我说我有一个Linux帐户,它没有启用Internet访问。为了在Linux机器上安装软件包,我首先会在我的Windows机器上下载所有需要的源代码,然后将它们通过ftp传输到Linux机器上,并使用

install.packages('/home/me/R/Packages/blah.tar.gz', repos = NULL)
zy1mlcev

zy1mlcev1#

我最近遇到了一个问题,我想下载所有依赖项,我已经解决了这个问题:
假设我想要ggplot2MASS的所有依赖项和导入:

getPackages <- function(packs){
  packages <- unlist(
    tools::package_dependencies(packs, available.packages(),
                         which=c("Depends", "Imports"), recursive=TRUE)
  )
  packages <- union(packs, packages)
  packages
}

packages <- getPackages(c("ggplot2", "MASS"))

我现在可以将包下载到另一个目录。

download.packages(packages, destdir="whereyouactuallywantthefiles", 
                  type="source")

从那里,如果你想在你的Linux PC上创建一个本地存储库,请按照here的说明操作。

8fq7wneg

8fq7wneg2#

请尝试download.packages(c("xts", "rms"), "c:/TEMP", .....),而不是install.packages();你可以直接在第二个参数中给予它一个目标目录。

  • 几年后再编辑:* 正如上面的其他答案和评论所述,到目前为止,R的tools和utils包中已经添加了几个helper函数。R 3.4.0将有tools::CRAN_package_db()来下载顶级PACKAGES.rds文件(当然,您也可以将download.file()readRDS()组合起来)。
5f0d552i

5f0d552i3#

现在在base R附带的 tools 包中有更好的选项:package_dependencies()。例如,请参阅@sebastian-c的答案和此recent Q&A以获取相关用例。

在utils包中有一个未导出的getDependencies()函数,我还没有研究过它是如何工作的,但是将它与@Dirk's Answer结合起来应该可以让你大部分的方法。
不过,基本上你是这样使用它的:

utils:::getDependencies(pkgs, dependencies, available, lib)

其中pkgs是要安装的包的字符向量,dependencies是您想要的依赖项类型(Depends,Enhances等)的字符向量,availableavailable.packages()的输出,lib是评估依赖项的包的库位置。
如果您调试install.packages(),它基本上是在实际开始安装任何东西之前执行getDependencies()步骤,然后执行@Dirk的download.packages()步骤。

qlvxas9a

qlvxas9a4#

关于完整性:我需要创建一个文件夹“Raw_packages”,其中包括所有来自p.names的软件包(名称向量),它们的依赖关系,它们的依赖关系等。目的是使用此文件夹在未连接到Internet的PC上安装必要的软件包。此解决方案有助于:https://www.r-bloggers.com/2017/05/installing-packages-without-internet/。最重要的部分是在tools::package_dependencies()中使用recursive = TRUE。

相关问题