1

当我尝试做这样的事情时:

data <- read_csv("blah.csv",
+                n_max = 100,
+                col_types = cols_only(list(files = "c"))
+ )
Error: Some `col_types` are not S3 collector objects: 1

所以问题是是否可以将命名列表传递给cols_only()

4

2 回答 2

5

参数的适当上下文cols_only是拼出您要专门读取的列以及您要分配给该列的类型。

例子:

data<-read_csv("blah.csv",
  n_max=100,
  col_types = cols_only(
              pumkins = col_factor(c("Hooligan", "Cinderella", "Big Max")),
              weight = col_double()
              ))

在这种情况下,我打开了名为南瓜和权重的两列,为每个列分配类型,在南瓜的情况下,分配因子水平。 cols_only将接受一个列表,但列表格式如上。您可以根据需要在该列表中放置尽可能多或尽可能少的列名和类型描述符。

如果您只想输入一封信,那么您可以通过以下方式将其设置为相等:

            c<-cols_only(
                  pumkins = col_factor(c("Hooligan", "Cinderella", "Big Max")),
                  weight = col_double())

然后将 c 直接放入:

data <- read_csv("blah.csv",
           n_max = 100,
           col_types = c)
           )
于 2017-02-18T18:02:23.027 回答
3

当然,只需使用do.call列表作为函数的参数,例如

library(readr)

read_csv(system.file('extdata', 'mtcars.csv', package = 'readr'),    # sample data from readr
         col_types = do.call(cols_only, list(cyl = 'i')))

#> # A tibble: 32 × 1
#>      cyl
#>    <int>
#> 1      6
#> 2      6
#> 3      4
#> 4      6
#> 5      8
#> 6      6
#> 7      8
#> 8      4
#> 9      4
#> 10     6
#> # ... with 22 more rows
于 2017-02-18T18:06:40.847 回答