问题 如何修复“输入中无可用行”的R中的错误?


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

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

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


10957
2017-11-28 19:51


起源

最后一个问题的评论是要求的内容 urls,因为我怀疑这是错误所在。你能输入吗? dput(urls) 并在此处复制+粘贴输出。 - Ricardo Saporta
你有没有试过@ GSee的建议? - Ricardo Saporta
什么时候你看到了 "no lines available in input" 错误?就在之后 myData <-... 线?如果没有,myData会得到一些输入,而不是正确的输入吗? (请参阅下面的答案,如果方向正确,请告诉我们)。另外,当您尝试GSee的建议时会发生什么? - Ricardo Saporta


答案:


以下是两种可能的解决方案(未经测试,因为您的示例不可重复):

运用 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)
})

16
2017-11-28 19:57



非常感谢,它完美无缺! - Rosa
@Rosa,你可以使用删除列表中的空值 is.null:<BR> myData <- myData[!sapply(myData, is.null)] - Ricardo Saporta
@Rosa, Filter(NROW, myData) 只会保留至少有一行的组件。 - GSee


这有帮助吗?

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

如果 myData 仍然抓住车站页面上的东西,上面的代码应该分开 myData 列表分为两组。 good_Ones 将是您想要使用的列表。 (当然,假设上述内容是准确的)


0
2017-11-28 20:32



我不认为你在2之后想要那个逗号,但我认为你不想要 sapply 无论是。也许 Filter 会更好,但目前尚不清楚我们要解决的问题。 ;) - GSee
@Ricardo Saporta,GSee的答案得到了我想要的确切结果,我猜空数据导致错误,从而停止了lapply函数,现在它向前移动,因为我们将它设置为NULL。无论如何,谢谢你的帮助,谢谢! :) - Rosa
@Gsee,关闭评论中发布的(非)表格, read.table 将整个内容作为单个列引入,而正确的表有几列。我正在使用昏暗来识别哪一个只有一列。 sapply将第一行作为dim的第一维,将第二行作为第二维等等。因此逗号;) - Ricardo Saporta
@Rosa,太棒了!很高兴你得到了解决。 - Ricardo Saporta