【问题标题】:Using rlang::sym inside list definition在列表定义中使用 rlang::sym
【发布时间】:2019-02-04 06:53:27
【问题描述】:

我正在编写一个 R 脚本,我需要允许用户指定将手动处理的变量的名称,即

var <- 'user_name'

一般来说,我指的是使用rlang::sym 和引用/取消引用机制。但是,我需要使用tidyr::replace_na,并且我的想法在这里都不起作用,因为必须在list 中指定变量的名称。

在这种情况下,我如何参考我的var?我在想类似下面的事情:

data <- data %>% replace_na(list(sym(var) = 0))

但它没有工作......

【问题讨论】:

    标签: r tidyr rlang quasiquotes


    【解决方案1】:

    我们也可以将replace_na 放在mutate 中并取消引用:

    library(dplyr)
    library(tidyr)
    
    var <- 'user_name'
    
    data %>%
      mutate(!!var := replace_na(!!sym(var), 0))
    

    结果:

      user_name
    1         0
    2         1
    3         2
    4         3
    5         4
    6         5
    

    数据:

    data <- data.frame(user_name = c(NA, 1:5))
    

    【讨论】:

      【解决方案2】:

      不使用dplyr/tidyr以外的任何外部包,我们可以用setNames改变它

      library(dplyr)
      library(tidyr)
      data %>% 
          replace_na(as.list(setNames(0, var)))
      #   user_name
      #1         0
      #2         3
      #3         4
      

      数据

      data <- data.frame(user_name = c(NA, 3, 4))
      

      【讨论】:

        猜你喜欢
        • 2018-08-18
        • 2019-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 1970-01-01
        • 2019-02-27
        相关资源
        最近更新 更多