从本地存储库安装R软件包时出现问题

to94eoyn  于 2023-06-03  发布在  其他
关注(0)|答案(2)|浏览(267)

我已经创建了一个包含几个r包及其所有依赖项的本地存储库-这是一个名为PACKAGES的目录,在该目录下有许多包的zip文件。
我尝试使用以下命令安装软件包:

install.packages("dplyr",repos="path_to_repos",type="source")

并不断得到错误:

cannot open compressed file path_to_repos/src/contrib/PACKAGES, probable cause "permission denied"

我可以通过一个接一个地选择文件从同一个目录安装软件包-但由于依赖性,这是不实际的。
我正在使用Windows 10,并以管理员身份运行。无法找出权限错误的原因。
有什么见解吗?

pod7payv

pod7payv1#

如果我理解正确的话,你已经创建了一个名为“PACKAGES”的目录,这似乎是问题所在。所有的文件都应该放在“contrib”目录中。
将包文件添加到“contrib”目录后,可以使用 utils 包中的setRepositories函数创建存储库。我建议将以下代码添加到您的.Rprofile作为本地存储库:

utils::setRepositories(ind = 0, addURLs = c(WORK = "file://<your higher directories>/R"))

编辑. R配置文件后,重新启动R。
ind = 0将指示您只需要本地存储库。addURLs =选项中可以包含其他存储库,这些存储库在字符向量中以逗号分隔。
接下来,使用以下代码创建存储库索引:

tools::write_PACKAGES("/<your higher directories>/R/src/contrib", verbose = TRUE)

这将生成用作存储库索引的PACKAGE文件。
要查看存储库中的包,请运行以下代码并查看生成的数据框:my_packages <- available.packages()
此时,您可以从存储库安装包,而无需引用包安装文件的整个路径。例如,要安装 dplyr 包,可以运行以下命令:

install.packages("dplyr", dependencies = TRUE)

如果你想更进一步,管理一个不断变化的仓库,你可以安装并使用 miniCRAN 包。否则,每当存储库发生更改时,都需要执行write_PACKAGES函数。
安装 miniCRAN 包后,可以执行以下代码创建 miniCRAN repo:

my_packages <- available.packages()

 miniCRAN::makeRepo(
  pkgs = my_packages[,1, 
  path = "/<your higher directories>/R",
  repos = getOption("repos"), 
  type = "source",
  Rversion = R.version, 
  download = TRUE, 
  writePACKAGES = TRUE,
  quiet = FALSE
 )

你只需要对每个repo执行一次上面的代码。
然后,检查以确保每个miniCRAN存储库都已创建。对于每个repo,您只需要执行一次此操作:

pkgAvail(
  repos = getOption("repos"),
  type = "source",
  Rversion = R.version,
  quiet = FALSE
 )

每当新的包文件被放入本地存储库时,您可以更新本地存储库的索引,如下所示:

miniCRAN::updateRepoIndex("/<your higher directories>/R/")

最后,作为查看新包是否在索引中的可选步骤,创建可用包的数据框并搜索数据框:

my_packages <- available.packages(repos = "file://<your higher directories>/R/")

这种方法对我来说效果很好,但也许其他人有意见和建议可以改进它。

ioekq8ef

ioekq8ef2#

这就是我如何在Windows 10系统上实现这一功能。感谢@Andrie和@Ted-M的上述工作!
将以下目录添加到您的文件系统(其中C:\R42_Packages是您自己的命名约定):
C:\R42_Packages\R\bin\windows\contrib\4.2

C:\R42_Packages\R\src\contrib
将所有.zip Windows包放在C:\R42_Packages\R\bin\windows\contrib\4.2
将这一行添加到您的.Rprofile中-注意file:/R42_Packages中的单个/,而不是上面和R安装和管理手册中显示的file://R42_Packages

utils::setRepositories(ind = 0, addURLs = c(localCRAN = "file:/R42_Packages/R"))

...其中localCRAN是您要用作引用的名称。(如果你不想和.Rprofile打交道,那么现在就在R控制台中输入这行代码,然后在每次使用R的时候输入。)如果你使用的是.Rprofile,那么重新启动R。
验证当前R会话存储库是否指向本地目录。

options('repos')

接下来,通过在R控制台中键入以下行来创建存储库索引:

tools::write_PACKAGES("C:/R42_Packages/R/bin/windows/contrib/4.2", verbose = TRUE)

这将在C:\R42_Packages\R\bin\windows\contrib\4.2目录中创建三个PACKAGES文件:PACKAGESPACKAGES.gzPACKAGES.rds。这个过程需要一点时间才能完成,所以请等待控制台提示符出现。
此时,您可以通过在R控制台中键入以下命令来验证所有操作是否正确:

myPacks <- available.packages()  
View(myPacks)

最后,将单个PACKAGES文件复制C:\R42_Packages\R\src\contrib。R安装和管理手册说这可以是一个“……”可能为空的PACKAGES文件...'但我发现这需要是来自C:\R42_Packages\R\bin\windows\contrib\4.2目录的PACKAGES文件的副本。请注意,如果您将所有三个PACKAGES文件复制到C:\R42_Packages\R\src\contrib目录中,也不会有任何损害。
最后,您需要重新构建并重新复制PACKAGES文件每次更新或添加新的.zip包文件到C:/R42_Packages/R/bin/windows/contrib/4.2目录。

相关问题