【发布时间】:2025-12-01 16:55:01
【问题描述】:
我从 2018 年看到here 提出的问题。我想知道今天是否有更好的答案。
我们的工作计算机被整个 IT 安全部门所困扰,似乎存在使它们无用的情况。我们可以运行 R 3.6.3(4.x 尚未获得批准)。我们无法从公司防火墙后面连接到 CRAN。在过去,这意味着我们将笔记本电脑带回家安装软件包。但是现在我们有了一个下载监视器,即使我们使用自己的 wi-fi 也可以阻止 CRAN 下载。
我试图通过在个人计算机上下载压缩包 .zip 文件,通过 CD 传输它们,然后使用 repos=NULL 安装来解决此问题。我用了这段代码
getPackages <- function(packs){
packages <- unlist(
tools::package_dependencies(packs, available.packages(),
which=c("Depends", "Imports"), recursive=TRUE)
)
packages <- union(packs, packages)
packages
}
获取我想要的包的依赖项并使用download.packages() 将它们全部下载。我试图安装tidyquant,结果发现有113个依赖项。
当然,这会下载所有 113 个包的最新版本,其中一些包与 R 3.6.3 不兼容。
我上面提到的解决方案建议找到兼容的版本,然后使用
install_version("<package name>",
version = "<version number>",
repos = "http://cran.us.r-project.org")
但这将涉及手动搜索所有 113 个依赖项...另外,我正在寻找一个通用解决方案,我可以与我办公室中的大约 10 个其他人共享,他们现在都有这个问题。
我希望自 2018 年以来可能会出现更好的解决方案?
更新: 根据下面的答案,我尝试过
tmp <- tempfile()
dir.create(tmp)
checkpoint::checkpoint(snapshot_date = "2020-04-01",
r_version = "3.6.3",
checkpoint_location = tmp,
scan_now = FALSE)
packages <- getPackages(c("tidyquant"))
download.packages(packages, destdir="C:\\Users\\jerem\\Downloads\\tidyquant", type="win.binary")
我明白了
Running create_checkpoint in the home directory may result
in checkpointing very many packages. Continue? (Y/n) Y
Creating checkpoint directory C:/Users/jerem/AppData/Local/Temp/Rtmpa2YEjU/file1efc6daf58e3/.checkpoint/2020-04-01/lib/x86_64-w64-mingw32/3.6.3
Using checkpoint directory C:/Users/jerem/AppData/Local/Temp/Rtmpa2YEjU/file1efc6daf58e3/.checkpoint/2020-04-01/lib/x86_64-w64-mingw32/3.6.3
Warning messages:
1: In create_checkpoint(snapshot_date, r_version, checkpoint_location, :
Specified R version not the same as current R version
2: In use_checkpoint(snapshot_date, r_version, checkpoint_location, :
Specified R version not the same as current R version
>
> packages <- getPackages(c("tidyquant"))
>
> download.packages(packages, destdir="C:\\Users\\jerem\\Downloads\\tidyquant", type="win.binary")
Warning: unable to access index for repository https://mran.microsoft.com/snapshot/2020-04-01/bin/windows/contrib/4.1:
cannot open URL 'https://mran.microsoft.com/snapshot/2020-04-01/bin/windows/contrib/4.1/PACKAGES'
Warning in download.packages(packages, destdir = "C:\\Users\\jerem\\Downloads\\tidyquant", :
no package ‘tidyquant’ at the repositories
Warning in download.packages(packages, destdir = "C:\\Users\\jerem\\Downloads\\tidyquant", :
no package ‘lubridate’ at the repositories
Warning in download.packages(packages, destdir = "C:\\Users\\jerem\\Downloads\\tidyquant", :
no package ‘PerformanceAnalytics’ at the repositories
所有 113 个依赖项都会出现“无包”警告。
我认为这里的关键是
Warning: unable to access index for repository https://mran.microsoft.com/snapshot/2020-04-01/bin/windows/contrib/4.1:
显然,2020 年 4 月不会有 4.1 存储库。我认为它正在尝试这样做,因为机器运行的是 4.1。所以看起来我们已经非常接近了....
如果有帮助
> sessionInfo()
R version 4.1.2 (2021-11-01)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 22000)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
system code page: 65001
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_4.1.2 tools_4.1.2 checkpoint_1.0.2
【问题讨论】:
-
你可以使用 conda,这就是我必须做的。我不得不为某些库使用 4.0 版本。我为 R 版本制作了单独的 conda 环境并安装了依赖项
-
我并没有真正使用过,不过不妨看看网上的RStudio Package Manager。您可以将其修复到某个时间点并在该日期下载软件包。