使用read_csv导入而不猜测R

时间:2017-11-07 10:05:41

标签: r tidyverse readr

有没有办法从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)

即。我导入文件以了解行数,然后“猜测”到该行。但我觉得必须有一个更好的方法。在我读完之后,任何人都有这个想法对我来说很明显吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

不请自来的评论:如果我错了,请纠正我,但是根据我的理解,您正在尝试采用guess_max = nrow,因为您假设R是否具有看到一列中的所有行,那么猜测该列的类是什么?

我不确定这将如何工作。即使R查看所有行,从真正意义上来说,它仍然会 guess 该列的类。