将命名列表传递给 cols_only()

passing named list to cols_only()

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

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()

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)
           )

当然可以,就用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