【问题标题】:Unexpected behaviour of R "library" function with function args as parameters [duplicate]以函数args为参数的R“库”函数的意外行为[重复]
【发布时间】:2013-12-17 22:55:49
【问题描述】:

我想要做的很简单:

required_pkgs <- c("A", "B", "C")

for (pkg in required_pkgs) {
   library(pkg)
}

在运行时,R 解释器尝试查找(3 次)一个名为“pkg”的包(当然它在第一次尝试时失败),而我确实希望它是“A”、“B”、 “C”。

当然,我对语言的无知让我错过了重点,但为什么会这样呢? R 是否希望我编写以下代码:

library(A)
library(B)
library(C)

我确实需要迭代每个包加载以处理丢失的包并回退到安装它或选择替代方案。

基本上我抱怨无法遍历包名称数组,每次使用 for 参数 (pkg) 调用 library 导致 R 尝试加载一个不存在的pkg 库。这可以通过在library 的调用中添加character.only=TRUE 参数来解决。

编辑:更多信息,抱歉如此含糊......

【问题讨论】:

标签: r


【解决方案1】:

您将 A、B 和 C 保存在 required_pkgs 中,然后将代码修改为:for 循环中的 library(required_pkgs[pkg]) 而不是 library(pkg)

【讨论】:

  • 我认为这不是正确的答案;像这样的东西:required_pkgs=c("A","B","C"); for(pkg in required_pkgs) library(required_pkgs[pkg]) 没有做我一直在照顾的事情(加载“A”、“B”、“C”)
【解决方案2】:

或者,如果你想一次安装三个包,你可以使用下面的 R 代码: 安装包(c(“A”,“B”,“C”)), 仍然如果它不能正常工作,请详细说明您的问题。

【讨论】:

  • 我的第一条评论解决了我的问题。在准确阅读文档之前,我惊慌失措,尽管这是违反直觉的。我应该忘记for,直接去library(required_pkgs)
猜你喜欢
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多