【问题标题】:CSV to disk frame with multiple CSVsCSV 到具有多个 CSV 的磁盘框架
【发布时间】:2020-09-18 17:49:50
【问题描述】:

我在尝试使用此代码导入 CSV 时遇到此错误:

some.df = csv_to_disk.frame(list.files("some/path"))

split_every_nlines(name_in = normalizePath(file, mustWork = TRUE), : 期望单个字符串值:[type=character; 范围=3]。

我得到了一个临时解决方案,其中有一个 for 循环遍历每个文件,然后我将所有磁盘帧重新绑定在一起。

我从摄取data doc中提取代码

【问题讨论】:

  • 看起来该函数只能采用单个值,而不是文件名向量。因此循环是一个有效的选择。那么问题是什么?
  • list.files('some_path', full.names = TRUE)?
  • 不,同样的错误

标签: r disk.frame


【解决方案1】:

这似乎是由bigreadr 包触发的错误。我想知道你是否有办法重现这些块。

或者也许尝试不同的块读取器,

csv_to_disk.frame(..., chunk_reader ="data.table") 

另外,如果全部失败(因为 CSV 读取很困难),循环读取它们然后追加也可以。

也许您需要指定只读取 CSV?喜欢

list.files("some/path", pattern=".csv", full.names=TRUE)

否则正常工作,

library(disk.frame)

tmp = tempdir()

sapply(1:10, function(x) {
  data.table::fwrite(nycflights13::flights, file.path(tmp, sprintf("tmp%s.csv", x)))
})


library(disk.frame)
setup_disk.frame()
some.df = csv_to_disk.frame(list.files(tmp, pattern = "*.csv", full.names = TRUE))

【讨论】:

  • 我尝试将过滤器添加到“.csv 中,它给了我一条消息,每个文件都重复了这个短语:Stage 1 of 2: splitting the file [path] 然后它给了我这个错误:@ 987654326@
  • 您是否可以使用 data.table 正确读取文件?听起来 bigreadr 不喜欢你的文件可能是因为格式?你需要设置分隔符吗?您可以尝试的另一件事(较慢的是使用 csv_to_disk.frame(..., chunk_read="data.table") 进行循环方法很好。
猜你喜欢
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2015-06-08
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多