将变量传递给库函数

时间:2014-06-23 08:11:20

标签: r load

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

1 个答案:

答案 0 :(得分:3)

这是一个更简单的代码版本(包含@ 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):

  

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