readr:传递一串列 类
readr: Passing a string of column classes
我想用readr::read_csv()读取几个数据集
我有一个 CSV,其中包含每个文件的描述,如下所示:
# 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
我希望这样的事情能奏效:
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()。
这个有效:
> cols('c', 'n')
cols(
= col_character(),
= col_number()
)
这不起作用:
> 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() 对象?
为了获得第二个例子,你可以使用do.call
:
aa <- c('c','n')
do.call(cols,as.list(aa))
cols(
= col_character(),
= col_number()
)
我想用readr::read_csv()读取几个数据集
我有一个 CSV,其中包含每个文件的描述,如下所示:
# 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
我希望这样的事情能奏效:
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()。
这个有效:
> cols('c', 'n')
cols(
= col_character(),
= col_number()
)
这不起作用:
> 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() 对象?
为了获得第二个例子,你可以使用do.call
:
aa <- c('c','n')
do.call(cols,as.list(aa))
cols(
= col_character(),
= col_number()
)