【问题标题】:Debugging a loop in R [duplicate]在R中调试循环[重复]
【发布时间】:2021-11-09 13:00:34
【问题描述】:

我已经编写了一个循环来在 R 中安装包,虽然我知道还有其他方法可以批量安装包,但我不明白为什么循环不起作用:我收到错误消息:错误:@987654321 @ 必须是长度为 1 的字符向量。我不明白,因为 package[i] 应该返回一个字符向量。

packages<-c("dplyr","ggplot")
for (i in seq_along(packages)){
print(packages[i])
if (!require(packages[i])) install.packages(packages[i]) 
}

任何人都可以建议对上述代码进行任何修改吗?

【问题讨论】:

  • 不行,我想专门调试一下上面的代码,试着理解为什么它不起作用。
  • 你需要seq吗?为什么不只是packages&lt;-c("dplyr","ggplot") for (i in packages){ print(i) if (!require(i)) install.packages(i) }
  • 我认为这个问题与require()函数中包名的预期输入格式有关。默认情况下,它需要一个不带引号的包名称。但是,您可以通过设置character.only = TRUE 告诉它使用带引号的字符串。试试if (!require(packages[i], character.only = TRUE)) 注意你可以用if (!require(as.name(packages[i])))做相反的事情

标签: r


【解决方案1】:
pack <- function(x){
  for( i in x ){
    if( ! require( i , character.only = TRUE ) ){
      #  If package was not able to be loaded then re-install
      install.packages( i , dependencies = TRUE )
    }
    #  Load the package after installing
    library( i , character.only = TRUE )
  }
}

pack ( c("dplyr","ggplot2"))

【讨论】:

  • + 我认为应该是“ggplot2”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 2015-10-26
  • 2017-08-23
  • 2018-01-30
  • 2021-11-30
相关资源
最近更新 更多