使用 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",没有关闭应用程序,没有移动鼠标或任何键盘响应 - 我不得不使用电源按钮重新启动。
我尝试了低于 Inf
的 guess_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 是什么。
有没有办法使用 readr 包中的 read_csv
而不是猜测列类型?
函数文档讲述了这个参数:guess_max = min(1000, n_max)
,它向我建议 n_max
(即 Inf
)的标准值是一个可行的选项。它不是 - 它使整台计算机崩溃。没有 "R does not respond",没有关闭应用程序,没有移动鼠标或任何键盘响应 - 我不得不使用电源按钮重新启动。
我尝试了低于 Inf
的 guess_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 是什么。