readr::read_csv 使用 cols_only 与拼接列表
readr::read_csv use cols_only with spliced list
我可以像这样读取 cols_only
中定义的列子集:
x <- read_csv(filePath, col_types=cols_only(colA=col_character())
x <- read_csv(filePath, col_types=cols_only(colA='c'))
两者都工作正常,但我尝试创建一个列表以传递给 cols_only
并拼接它,就像我在许多 Tidyverse 函数中所做的那样,但是这个会产生错误。
cols <- list(colA='c')
x <- read_csv(filePath, col_types=cols_only(!!!cols))
我也尝试将其作为命名向量 cols <- c(colA='c')
,但出现错误 Error in !cols: invalid argument type
。
这是功能的限制吗?我看到这个 GitHub 问题 https://github.com/tidyverse/readr/issues/971 所以希望这个功能可以支持这个功能。
如果拼接不行,就用do.call
library(readr)
df1 <- read_csv(file.choose(), col_types = do.call(cols_only, cols))
使用一个可重现的小例子
cols1 <- list(`Service Charge`='c', `MONTHLY FEES` = 'c')
df1 <- read_csv(file.choose(),
col_types = do.call(cols_only, cols1))
-输出
head(df1)
# A tibble: 6 x 2
# `Service Charge` `MONTHLY FEES`
# <chr> <chr>
#1 Customer Transfer Dr. INVESTMENT PURCHASE
#2 Customer Transfer Dr. INVESTMENT PURCHASE
#3 Miscellaneous Payment PAYPAL
我可以像这样读取 cols_only
中定义的列子集:
x <- read_csv(filePath, col_types=cols_only(colA=col_character())
x <- read_csv(filePath, col_types=cols_only(colA='c'))
两者都工作正常,但我尝试创建一个列表以传递给 cols_only
并拼接它,就像我在许多 Tidyverse 函数中所做的那样,但是这个会产生错误。
cols <- list(colA='c')
x <- read_csv(filePath, col_types=cols_only(!!!cols))
我也尝试将其作为命名向量 cols <- c(colA='c')
,但出现错误 Error in !cols: invalid argument type
。
这是功能的限制吗?我看到这个 GitHub 问题 https://github.com/tidyverse/readr/issues/971 所以希望这个功能可以支持这个功能。
如果拼接不行,就用do.call
library(readr)
df1 <- read_csv(file.choose(), col_types = do.call(cols_only, cols))
使用一个可重现的小例子
cols1 <- list(`Service Charge`='c', `MONTHLY FEES` = 'c')
df1 <- read_csv(file.choose(),
col_types = do.call(cols_only, cols1))
-输出
head(df1)
# A tibble: 6 x 2
# `Service Charge` `MONTHLY FEES`
# <chr> <chr>
#1 Customer Transfer Dr. INVESTMENT PURCHASE
#2 Customer Transfer Dr. INVESTMENT PURCHASE
#3 Miscellaneous Payment PAYPAL