【问题标题】:How to use col_types using readr's read_delim_chunked?如何使用 readr 的 read_delim_chunked 来使用 col_types?
【发布时间】:2020-01-07 22:00:07
【问题描述】:

我正在尝试分块读取文件并指定 col_types,请参阅 MWE

write.csv(cars, "cars.csv")


library(readr)
readr::read_delim_chunked("cars.csv", function(x, i) {
  x
}, delim= ",", col_types = cols(
  speed = col_character()
), chunk_size = 10)

但我得到错误的输出

NULL

但非分块版本可以正常工作

library(readr)
readr::read_delim("cars.csv", delim= ",", col_types = cols(
  speed = col_character()
))

【问题讨论】:

  • 这是一个警告,而不是错误:代码仍在运行,对吧?
  • @camille 没有。这是一个错误的输出。

标签: r tidyverse readr


【解决方案1】:

问题是当我们执行write.csv 时,row.names 被包含为一个新列

write.csv(cars, "cars.csv", row.names = FALSE, quote = FALSE)

另外,我们需要col_character() 而不是col_character

readr::read_delim_chunked("cars.csv",  DataFrameCallback$new(function(x, i) {
  x
}), col_types = cols(
  speed = col_character()
), delim= ",",  chunk_size = 10)

【讨论】:

  • 我认为问题是DataFrameCallback$new
  • 抱歉 () 是错字
【解决方案2】:

出于某种原因,您需要将函数包装在 DataFrameCallback$new 中,原因我不明白。

write.csv(cars, "cars.csv")

作品

readr::read_delim_chunked("cars.csv",  DataFrameCallback$new(function(x, i) {
  x
}), col_types = cols(
  speed = col_character()
), delim= ",",  chunk_size = 10)

报错

readr::read_delim_chunked("cars.csv",  function(x, i) {
  x
}, col_types = cols(
  speed = col_character()
), delim= ",",  chunk_size = 10)

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多