循环和 If 语句来检查和加载包

Loop and If statement to check and load packages

为什么不要求获取包向量?还有一种方法可以为 install.package 和 BiocManager 拆分 pkg 吗?因此,如果使用 install.package 安装软件包失败,请检查 BiocManager?

错误: [1] “字符串” 加载所需的包:我 print.default("trying to install", i) 错误: 无效的打印数字 -2147483648 此外: 警告信息: 1:在库中(包,lib.loc = lib.loc,character.only = TRUE,logical.return = TRUE,: 没有名为“i”的包 2:在 print.default("trying to install", i) 中:强制引入的 NAs

pkg <- c("stringr", "openxlsx")

for (i in pkg){
    print(i)
    if(require(i)){
       print(i, "is loaded correctly")
    } else{
       print("trying to install", i)
       install.packages(i)
       if(require(i)){
          print(i, "installed and loaded")
       } else{
          stop("could not install", i)
       }
    }

}

在那个 for 循环中 至少有 3 个错误。首先,缺少第一个 require

的参数

... 然后未能将 requirecharacter.only 参数设置为 TRUE,以便 i 可以得到评估而不是作为包名称,(参见 ?require参数部分)

...最后,无法在 print 调用中加入所需的字符值 paste。 (参见 ?print.default 的参数部分。打印函数只打印它的第一个参数。它的第二个参数是位数,如控制台错误消息所述。)

pkg <- c("stringr", "openxlsx")

for (i in pkg){
    print(i)
    if(require(i, character.only=TRUE)){
        print(paste(i, "is loaded correctly"))
    } else{
        print(paste("trying to install", i))
        install.packages(i)
        if(require(i, character.only=TRUE)){
            print(paste(i, "installed and loaded"))
        } else{
            stop(paste("could not install", i))
        }
    }
}

我确实收到了:“警告消息: 在库中(包,lib.loc = lib.loc,character.only = TRUE,logical.return = TRUE,: 在我不理解的那个循环的第一个 运行 之后没有名为 'openxlsx' 的包(因为消息 [1] "openxlsx installed and loaded" 被打印,并且包确实安装并且可以加载。我'我猜这与函数内完成的这些活动有关,并且环境不匹配???当我删除 pkg:openxlsx 和 re-ran 我的代码时,我没有收到警告消息。