将变量传递给库函数

4
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函数?


4
尝试使用 library(i, character.only = T) - csgillespie
默认情况下,library(i)会查找名称为“i”的软件包。我认为这是为了方便起见而做的,以节省输入软件包名称时的引号。如果要覆盖此行为,请参考@csgillespie的提示,在?library中也有一个示例。 - tonytonov
感谢字符之美! - tky
1个回答

4
这里是你的代码的简化版本(包括 @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 中存在非标准评估。根据文档 ? librarycharacter.only 参数可以解决此问题:

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


旁边的问题:循环索引的目的是什么?我认为只有在长向量上开销才会很大,我错了吗? - tonytonov
@tonytonov 主要是风格方面的。 - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接