使用 read_csv 导入而不用猜测 R 中的列类型

Import with read_csv without guessing column types in R

有没有办法使用 readr 包中的 read_csv 而不是猜测列类型?

函数文档讲述了这个参数:guess_max = min(1000, n_max),它向我建议 n_max(即 Inf)的标准值是一个可行的选项。它不是 - 它使整台计算机崩溃。没有 "R does not respond",没有关闭应用程序,没有移动鼠标或任何键盘响应 - 我不得不使用电源按钮重新启动。

我尝试了低于 Infguess_max 的高值,但问题是这会使一切变慢,值越高。现在我改用下面的代码。

# how many rows?
rowsInFile <- read_csv(
        "sources/features.csv"
        , col_types = cols(.default = "c")) %>%
    nrow()

# ...use that to not guess
df <- read_csv("sources/features.csv", guess_max = rowsInFile)
rm(rowsInFile)

即我导入文件以了解有多少行,然后 "guess" 到该行。但我觉得必须有更好的方法。在我阅读后,有人明白我的想法吗?

如果您不关心性能,请尝试 length()count.fields()

的这种组合

length(count.fields("sources/features.csv", skip = 1))

count.fields() 计算文件读取的每一行中由 sep 分隔的字段数,因此如果我们测量该结果的 length(),我们实际上得到了文件中的行。

不请自来的评论:如果我错了请纠正我,但据我了解你正在尝试接受 guess_max = nrow 因为你是假设如果 R 已经看到一列中的所有行,那么 而不是 猜测该列的 class 是什么?

我不确定它是如何工作的。即使 R 查看了所有行,它仍然会在真正意义上 猜测 该列的 class 是什么。