【问题标题】:readr::read_csv use cols_only with spliced listreadr::read_csv 使用 cols_only 和拼接列表
【发布时间】:2021-08-11 00:46:09
【问题描述】:

我可以像这样读取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 &lt;- c(colA='c'),但我收到错误Error in !cols: invalid argument type

这是功能的限制吗?我看到了这个 GitHub 问题 https://github.com/tidyverse/readr/issues/971 所以希望这个功能可以支持这个功能。

【问题讨论】:

    标签: r tidyverse readr


    【解决方案1】:

    如果拼接不起作用,请使用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                  
    

    【讨论】:

    • 非常好,它有效。你知道为什么在这种情况下拼接不起作用吗?对实现以及究竟缺少什么感到好奇。
    • @Raesu 我不确定原因。可能是一个错误,或者可能是 readr 包包含在拼接的范围内。尽管拼接在大多数其他情况下都有效,但我希望它可以工作。
    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2019-09-05
    • 2018-10-29
    相关资源
    最近更新 更多