【问题标题】:Passing variables to the library function [duplicate]将变量传递给库函数[重复]
【发布时间】:2014-06-23 08:11:20
【问题描述】:
package <- c("car","ggplot2","pastecs","psych")
for (i in package){
  if (!(i %in% rownames(installed.packages()))){
    install.packages(i)
  } else{
     print(paste(i,"has been installed"))
     library(i)
     }
 }

我写了一个循环来查看包是否安装,如果可用,库应该加载它。

However I got an error: there is no package called 'i'

为什么我不能将变量i 中的值传递给library 函数?

【问题讨论】:

  • 试试library(i, character.only = T)
  • 默认情况下,library(i) 查找名称为“i”的包。我相信这是为了方便起见,以便节省在包名称周围输入引号。覆盖此行为作为@csgillespie 提示,?library 中也有一个示例。
  • 感谢 character.only !

标签: r load


【解决方案1】:

这是您的代码的更简单版本(包含@csgillespie 的建议):

p <- c("car","ggplot2","pastecs","psych") 
for(i in seq_along(p)) {
    if(!require(p[i], character.only=TRUE)) {
        install.packages(p[i])
        library(p[i], character.only=TRUE)
    }
}

请注意,由于libraryrequire 中的非标准评估,您的代码不起作用。 character.only 参数解决了这个问题(根据文档? library):

字符.only
一个逻辑,指示是否可以将包或帮助假定为字符串。

【讨论】:

  • 附带问题:循环遍历索引的目的是什么?我认为开销只在长向量上很大,我不正确吗?
  • @tonytonov 主要是文体。
猜你喜欢
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
相关资源
最近更新 更多