1

我刚刚将readr包从版本 0.1.1 更新到 0.2.0,但现在之前有效的操作会引发错误。

在更新之前,我使用readr包进行了此操作:

file.list <- list.files(<path>, pattern='*.csv')

df.list <- lapply(file.list, read_csv2)
df.list <- lapply(df.list, function(x) x[-1,])

最后一步是必要的,因为我有一些带有特殊字符的长标题,它们会以某种方式导致读取额外的行。这是另一个问题,但在此之前只需删除第一行即可。

read_csv2警告我有关列名的问题,但如前所述,我通过删除行来解决这个问题:

Warning: 1 parsing failure.
  row col    expected      actual
   1  -- 227 columns 222 columns

然后我继续将所有数据帧绑定到一个使用dplyr::bind_rows(因为每个 .csv 具有相同的标题)。这以前很有效,但现在当我这样做时,我得到了

> full.data <- bind_rows(df.list)
Error: corrupt data frame

我没有更改任何其他内容(相同的 R 版本,相同的 RStudio 版本,没有更新其他包)。有没有人经历过类似的事情?与 0.1.1 版相比,read_csv2 的工作方式是否发生了重大变化。

谢谢

4

1 回答 1

6

显然我的问题的原因是因为原始 .csv 文件中的readr版本空单元格会自动转换为. 如果您的所有标题实际上都没有丢失,那么这可能是您 99% 的时间想要的,但当您的列标题之一为空时,这会相当乏味。事实上,我的原始文件确实包含空标题(因为这些文件实际上不是你所说的“整洁”)。0.2.0NA

因此,在通过阅读我的 .csv 文件后lapply(file.list, read_csv2),每个 data.frame 至少有一列NA作为列标题,这bind_rows(df.list)确实不喜欢。这可能是合理的,因为NA无论如何都不应该出现在列标题中。但是,正如这里所指出的,我认为readr应该有一些选项来解决空列标题的存在(或者至少抛出一个有意义的警告),特别是因为这也是我在这里提到的另一个错误的原因。

于 2015-10-23T10:03:57.647 回答