有没有办法从readr包中使用read_csv
而不是猜测列类型?
函数文档告诉我们这个参数:guess_max = min(1000, n_max)
,它告诉我n_max
的标准值(Inf
)是一个可行的选项。它不是 - 它崩溃了整个计算机。没有“R没有响应”,没有关闭应用程序,没有移动鼠标或任何键盘响应 - 我不得不使用电源按钮重新启动。
我尝试guess_max
的值高于Inf
的值,但问题是这会使值越高,值就越高。现在我改用以下代码。
# 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)
即。我导入文件以了解行数,然后“猜测”到该行。但我觉得必须有一个更好的方法。在我读完之后,任何人都有这个想法对我来说很明显吗?
答案 0 :(得分:1)
如果您不关心性能,请尝试结合使用length()
和count.fields()
length(count.fields("sources/features.csv", skip = 1))
count.fields()
计算读取文件的每一行中用sep分隔的字段数,因此,如果我们测量该结果的length()
,则实际上可以得到文件。
不请自来的评论:如果我错了,请纠正我,但是根据我的理解,您正在尝试采用guess_max
= nrow
,因为您假设R是否具有看到一列中的所有行,那么不猜测该列的类是什么?
我不确定这将如何工作。即使R查看所有行,从真正意义上来说,它仍然会 guess 该列的类。