【问题标题】:how to overcome this "subscript out of bound" error in R?如何克服 R 中的“下标越界”错误?
【发布时间】:2016-05-22 15:44:15
【问题描述】:

我有一个包含 10 个数据框的列表,名称分别为 q1、q2、q3....q9、q10。 所有这些数据帧都具有相同的结构,有两列:“word”和“count”。 现在我想打印前 5 行的值。我还想打印 for 循环的迭代次数。但是当我运行下面的for循环时,我得到一个错误 nam[["word"]] 中的错误:下标越界

for(x in 1:10){
  for(y in 1:5){
  nam<-paste("q",x,sep = "")
  print(nam[["word"]][y])
  print(nam[["count"]][y]) 
  print(y)
}}

当我更改代码以像这样处理我的数据帧时,我得到的错误是 错误 in nam$word : $ operator is invalid for atomic vectors

for(x in 1:10){
  for(y in 1:5){
  nam<-paste("q",x,sep = "")
  print(nam2$word[y])
  print(nam2$count[y])
  print(y)
}}

请建议我如何避免/克服此错误。任何帮助表示赞赏。谢谢, 阿曼

【问题讨论】:

  • 欢迎来到 R 语法的恐怖。

标签: r for-loop


【解决方案1】:

由于这里nam只是一个字符,所以需要先使用get函数获取实际的data.frame:

for(x in 1:10){
  for(y in 1:5){
  nam<-paste("q",x,sep = "")
  print(get(nam)[["word"]][y])
  print(get(nam)[["count"]][y]) 
  print(y)
}}

另一种实现您想要看到的避免for循环的方法:

lapply(1:10, function(i) head(get(paste0("q", i)), 5))

或者:

lapply(mget(paste0("q", 1:10)), head, 5) 

【讨论】:

    猜你喜欢
    • 2015-04-03
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多