Error: corrupt data frame when using dplyr::bind_rows after updating readr form 0.1.1 to 0.2.0

Error: corrupt data frame when using dplyr::bind_rows after updating readr form 0.1.1 to 0.2.0

我刚刚将 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,])

最后一步是必要的,因为我有一些带有特殊字符的长 headers,不知何故导致额外的一行被读取。这是另一个问题,但直到那时才删除第一行。

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

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

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

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

我没有改变任何其他东西(相同的 R 版本,相同的 RStudio 版本,没有更新其他包)。有没有人经历过类似的事情?与版本 0.1.1 相比,read_csv2 的工作方式是否有任何显着变化。

谢谢

显然我的问题的原因是因为 readr 版本 0.2.0 原始 .csv 文件中的空单元格自动转换为 NA。如果您所有的 header 实际上都是 non-missing,这可能是您 99% 的时间想要的,但当您的 header 列之一为空时,这会相当乏味。事实上,我的原始文件确实包含空的 header(因为这些文件实际上不是您所说的 "tidy")。

因此,在通过 lapply(file.list, read_csv2) 阅读我的 .csv 文件后,我每个 data.frame 至少有一个列 NA 作为 header 列 bind_rows(df.list)真的不喜欢。这可能是合理的,因为 NA 无论如何都不应该出现在 header 列中。但是,如前所述 here, I think readr should have some options to adress the existence of empty column headers (or at least throw a meaningful warning), especially since it is also the reason for another error as I mentioned here.