【问题标题】:How to fix the error in R of "no lines available in input"?如何修复 R 中“输入中没有可用行”的错误?
【发布时间】:2012-11-28 19:51:15
【问题描述】:

我需要做的是从数百个链接中读取数据,其中一些链接不包含数据,因此,如这里的代码:

urls <-paste0("http://somelink.php?station=",station, "&start=", Year, "01-01&etc")
myData <- lapply(urls, read.table, header = TRUE, sep = '|')

弹出一个错误说“输入中没有可用的行”,我尝试使用“try”,但同样的错误,请帮助,谢谢。

【问题讨论】:

  • 最后一个问题中的评论是询问urls 的内容,因为我怀疑这就是错误所在。请输入dput(urls) 并在此处复制+粘贴输出。
  • 你试过@GSee的建议吗?
  • 您何时看到"no lines available in input" 错误?在myData &lt;-... 行之后?如果没有,myData 是否得到一些输入,只是不是正确的? (请在下面查看我的回答,如果方向正确,请告诉我们)。另外,当您尝试 GSee 的建议时,具体会发生什么?

标签: r url


【解决方案1】:

这里有 2 种可能的解决方案(未经测试,因为您的示例不可重现):

使用try

myData <- lapply(urls, function(x) {
  tmp <- try(read.table(x, header = TRUE, sep = '|'))
  if (!inherits(tmp, 'try-error')) tmp
})

使用tryCatch

myData <- lapply(urls, function(x) {
  tryCatch(read.table(x, header = TRUE, sep = '|'), error=function(e) NULL)
})

【讨论】:

  • @Rosa,您可以使用 is.null 删除列表中的空值:
    myData &lt;- myData[!sapply(myData, is.null)]
  • @Rosa, Filter(NROW, myData) 只会保留至少有 1 行的组件。
【解决方案2】:

这有帮助吗?

  dims <- sapply(myData, dim)[2,]
  bad_Ones <- myData[dims==1]
  good_Ones <- myData[dims>1]

如果myData 仍然从电台页面抓取一些东西,上面的代码应该将myData 列表分成两个单独的组。 good_Ones 将是您想要使用的列表。 (当然,假设以上是准确的)

【讨论】:

  • 我不认为你想要 2 后面的逗号,但我认为你也不想要 sapply。也许Filter 会更好,但目前尚不清楚我们要解决什么问题。 ;)
  • @Ricardo Saporta,GSee 的回答得到了我想要的确切结果,我猜空数据导致错误并因此停止 lapply 函数,现在它向前移动,因为我们将其设置为 NULL。无论如何,感谢您的帮助,不胜感激! :)
  • @Gsee,离开了在 cmets 中发布的(非)表,read.table 将整个内容作为一列引入,而正确的表有几列。我正在使用 dim 来识别哪些只有一列。 sapply 将第一行作为 dim 的第一个维度,将第二行作为第二个维度,等等。因此逗号 ;)
猜你喜欢
  • 1970-01-01
  • 2021-07-20
  • 2012-04-22
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多