不同版本的 R 如何设法从 CRAN 看似自动下载不同的适当包版本?
How do different versions of R manage to seemingly automatically download different appropriate package versions from CRAN?
我可以利用它编写一个函数或进程来下载特定版本的 R 的包(和包依赖项),只有 1 个 R 安装可用吗?
背景
我在一个安装了多个 R 版本的站点工作,主要是在 Windows 环境和机器上。其中一些 environments/machines 无法连接到互联网,但用户要求在其上安装某些 packages/libraries 以供使用。
我可用的 R 版本未标准化。我无法在连接互联网的机器上使用 install.packages() 并手动将生成的下载包传输到未连接的机器,因为 R/packages 的生成版本在未连接的机器上可能不兼容。
让我们接受以这种规模手动搜索和下载所有包和依赖项是不可能的。对包裹的需求将是恒定的和变化的,无法提前预测。我不知道有一种方法可以轻松自动地确定与各种 R 版本匹配的包和依赖项的版本号,而无需通过 CRAN 包 histories/archives 之类的痛苦的手动拖网。我知道 install.packages() 或类似的东西似乎没有 "Rversion=" 参数。我发现 "kind-of" 解决包版本控制的大多数包假设您已经知道您需要什么包和版本,或者您已经拥有它们。用户无法向我提供 package/dependency 版本信息:他们只知道他们想要在他们的计算机上使用名为 "X" 的某个软件包,但我可以找出他们 运行 的 R 版本。
我很想说我的努力是毫无希望的……除了……在我看来,可以连接到 CRAN 的不同版本的 R 正在以某种方式下载与其自身版本相对应的包.
如果我在这方面有错误,请指正。但如果他们是,那么他们正在利用某种方法、功能或技术来这样做……从表面上看,我不明白为什么我不能至少部分地或理论上利用这种相同的技术或机制,如果我能找出它到底是什么的话。
我的困境的替代答案(自动下载 package/versions 对应于 R 的各种发行版本),如果我的询问似乎没有结果,我们也将不胜感激。
以下不是我的问题的有效解决方案:
- Upgrade/standardise 你的 R 版本
- 需要多台机器的管理员权限(我可以将其扩展到一台 computer/environment)
- 使用linux
- 让用户厌恶它 up/get 包版本控制 information/do 它自己
- 获取 internet/CRAN 对未连接 Internet 的计算机的访问权限
- 在本地镜像 CRAN
这对于评论来说太长了,但不是完整的答案。
我要第二个包存档。我认为您会发现您 need/want 经常从源代码安装。这可能是错误的,但如果为真,则意味着在每台机器上安装 Rtools 和 devtools
,这可能可行也可能不可行。
为了避免在任何地方安装 Rtools,你可以做的是让你的互联网连接机器存储你可能想要与之交谈的每个 R 版本,uninstall/reinstall 根据需要使用 Rtools,编译,然后进入您的 packages 目录并将编译后的包传送到您的目标计算机。
一旦您 devtools
安装了目标版本的 R(和 Rtools),那么我认为您将拥有接近稳定的情况。我能想到的最后一步是,您可能想要设置自己的 CRAN 镜像并在本地提取存档副本,以帮助世界,并减少对其他镜像的滥用。
从 internet/mirror 连接的机器上正确的 R 版本,你可以检查你想要的包的版本树,从最新的开始,然后向后工作 运行 Rscript 从命令行 devtools::install_version
直到安装成功。从那里进入 R
应该是一件简单的事情
有关其他可能有用的工具,另请参阅:
sessionInfo
R.oo::getDescriptionFile
这不是答案,但对于评论来说太长了。如果我没理解错的话,一个用户可以告诉你他想要这个包 X
而你必须提供给他。我猜你可以在某个地方下载正确的版本并将包传输到用户的机器上。
一般来说这似乎很难做到,但也许是可行的。但是,这需要用户的一点配合。
如评论中所述,package archive 存在并且包含每个包的所有旧版本。请记住以下行:
installed.packages()
为您提供安装在一台机器上的所有软件包。我不认为这对用户要求太多。
我会按照以下步骤进行。
- 进入所需包的存档页面。
- 下载最新的包源,展开并查看
DESCRIPTION
文件。
- 从中看包是否兼容用户的R版本。如果没有,下载二新等。
- 检查
DESCRIPTION
文件的 Depends
和 Import
字段,以满足依赖关系,并通过检查 installed.packages()
从用户的机器。
- 如果缺少包,则递归满足所有依赖项。
- 如果你完成了,现在你需要编译每个下载的包(因为档案似乎只有源代码,你需要编译它以将它分发到用户的机器)。
以上所有步骤都可以通过编写一个简单的函数来完成。处理所有异常可能很无聊,但我想在 R 中(或其他编程语言,取决于您的专业知识)执行上述操作应该不难。
我可以利用它编写一个函数或进程来下载特定版本的 R 的包(和包依赖项),只有 1 个 R 安装可用吗?
背景
我在一个安装了多个 R 版本的站点工作,主要是在 Windows 环境和机器上。其中一些 environments/machines 无法连接到互联网,但用户要求在其上安装某些 packages/libraries 以供使用。
我可用的 R 版本未标准化。我无法在连接互联网的机器上使用 install.packages() 并手动将生成的下载包传输到未连接的机器,因为 R/packages 的生成版本在未连接的机器上可能不兼容。
让我们接受以这种规模手动搜索和下载所有包和依赖项是不可能的。对包裹的需求将是恒定的和变化的,无法提前预测。我不知道有一种方法可以轻松自动地确定与各种 R 版本匹配的包和依赖项的版本号,而无需通过 CRAN 包 histories/archives 之类的痛苦的手动拖网。我知道 install.packages() 或类似的东西似乎没有 "Rversion=" 参数。我发现 "kind-of" 解决包版本控制的大多数包假设您已经知道您需要什么包和版本,或者您已经拥有它们。用户无法向我提供 package/dependency 版本信息:他们只知道他们想要在他们的计算机上使用名为 "X" 的某个软件包,但我可以找出他们 运行 的 R 版本。
我很想说我的努力是毫无希望的……除了……在我看来,可以连接到 CRAN 的不同版本的 R 正在以某种方式下载与其自身版本相对应的包.
如果我在这方面有错误,请指正。但如果他们是,那么他们正在利用某种方法、功能或技术来这样做……从表面上看,我不明白为什么我不能至少部分地或理论上利用这种相同的技术或机制,如果我能找出它到底是什么的话。
我的困境的替代答案(自动下载 package/versions 对应于 R 的各种发行版本),如果我的询问似乎没有结果,我们也将不胜感激。
以下不是我的问题的有效解决方案:
- Upgrade/standardise 你的 R 版本
- 需要多台机器的管理员权限(我可以将其扩展到一台 computer/environment)
- 使用linux
- 让用户厌恶它 up/get 包版本控制 information/do 它自己
- 获取 internet/CRAN 对未连接 Internet 的计算机的访问权限
- 在本地镜像 CRAN
这对于评论来说太长了,但不是完整的答案。
我要第二个包存档。我认为您会发现您 need/want 经常从源代码安装。这可能是错误的,但如果为真,则意味着在每台机器上安装 Rtools 和 devtools
,这可能可行也可能不可行。
为了避免在任何地方安装 Rtools,你可以做的是让你的互联网连接机器存储你可能想要与之交谈的每个 R 版本,uninstall/reinstall 根据需要使用 Rtools,编译,然后进入您的 packages 目录并将编译后的包传送到您的目标计算机。
一旦您 devtools
安装了目标版本的 R(和 Rtools),那么我认为您将拥有接近稳定的情况。我能想到的最后一步是,您可能想要设置自己的 CRAN 镜像并在本地提取存档副本,以帮助世界,并减少对其他镜像的滥用。
从 internet/mirror 连接的机器上正确的 R 版本,你可以检查你想要的包的版本树,从最新的开始,然后向后工作 运行 Rscript 从命令行 devtools::install_version
直到安装成功。从那里进入 R
有关其他可能有用的工具,另请参阅:
sessionInfo
R.oo::getDescriptionFile
这不是答案,但对于评论来说太长了。如果我没理解错的话,一个用户可以告诉你他想要这个包 X
而你必须提供给他。我猜你可以在某个地方下载正确的版本并将包传输到用户的机器上。
一般来说这似乎很难做到,但也许是可行的。但是,这需要用户的一点配合。
如评论中所述,package archive 存在并且包含每个包的所有旧版本。请记住以下行:
installed.packages()
为您提供安装在一台机器上的所有软件包。我不认为这对用户要求太多。
我会按照以下步骤进行。
- 进入所需包的存档页面。
- 下载最新的包源,展开并查看
DESCRIPTION
文件。 - 从中看包是否兼容用户的R版本。如果没有,下载二新等。
- 检查
DESCRIPTION
文件的Depends
和Import
字段,以满足依赖关系,并通过检查installed.packages()
从用户的机器。 - 如果缺少包,则递归满足所有依赖项。
- 如果你完成了,现在你需要编译每个下载的包(因为档案似乎只有源代码,你需要编译它以将它分发到用户的机器)。
以上所有步骤都可以通过编写一个简单的函数来完成。处理所有异常可能很无聊,但我想在 R 中(或其他编程语言,取决于您的专业知识)执行上述操作应该不难。