首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >readr:传递列类的字符串

readr:传递列类的字符串
EN

Stack Overflow用户
提问于 2018-11-16 23:10:22
回答 1查看 222关注 0票数 0

我想使用readr::read_csv()读取几个数据集。

我有一个CSV,它对每个文件的描述如下所示:

代码语言:javascript
复制
# A tibble: 5 x 8
  Object_Name File_Path      Column1   Column2   Column3   Column4 Column5 Column6
  <chr>       <chr>          <chr>     <chr>     <chr>     <chr>   <chr>   <chr>  
1 Object1     data/file1.csv character character character numeric numeric numeric
2 Object2     data/file2.csv character character character numeric NA      NA     
3 Object3     data/file3.csv character character numeric   NA      NA      NA     
4 Object4     data/file4.csv character numeric   numeric   numeric NA      NA     
5 Object5     data/file5.csv character numeric   numeric   NA      NA      NA    

如果这样的事情能成功的话,我希望:

代码语言:javascript
复制
for (i in 1:nrow(list_of_files)) {

  obj_name <- list_of_files[i,]$Object_Name
  pth <- list_of_files[i,]$File_Path

  col_types <- as.character(list_of_files[i,3:8])
  col_types <- col_types[!is.na(col_types)]

  # This part doesnt work
  tab <- readr::read_csv(file = pth,
                         col_types = col_types)

  assign(obj_name,tab)

}

通常猜测是可行的,但我需要确保。

编辑

简化问题,所以也许会更清楚。

要在read_csv上指定列类型,需要一个cols()调用。

这样做是可行的:

代码语言:javascript
复制
> cols('c', 'n')
cols(
   = col_character(),
   = col_number()
)

这不管用:

代码语言:javascript
复制
> aa <- c('c','n')
> cols(aa)
Error in switch(x, `_` = , `-` = col_skip(), `?` = col_guess(), c = col_character(),  : 
  EXPR must be a length 1 vector

因为我正在迭代一堆文件,所以我需要一些类似于第二个例子的内容。我可以保存带有列规范的字符串,但是如何将字符串转换为cols()对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-19 18:43:58

要获得第二个示例,只需使用do.call

代码语言:javascript
复制
aa <- c('c','n')
do.call(cols,as.list(aa))

cols(
   = col_character(),
   = col_number()
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53346557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档