【问题标题】:R dplyr Quosure logic when function input is a variable函数输入为变量时的 R dplyr Quosure 逻辑
【发布时间】:2018-06-03 06:46:42
【问题描述】:

我正在尝试使用 quosure 使自定义 group_by 函数正常工作。当函数的输入是字段的名称时,它可以正常工作。但是,如果我想创建一个包含要插入到函数中的字段名称的变量,我会因为该字段被引用而陷入困境。任何人都知道如何解决这个问题。请看下文

 groupedMean<-function(field){  
    expr<-enquo(field)

   mtcars%>%
       group_by(!!expr)%>%
       summarise(mean(mpg))  
 }

 #Works
 groupedMean(cyl)

 #Doesn't work
 groupFields<-c("cyl","gear")

 for(var in groupFields){
    print(groupedMean(eval(var)))
 }

【问题讨论】:

    标签: r dplyr quosure


    【解决方案1】:

    一种选择是使用symrlang 转换它

    for(var in groupFields){
         var <- rlang::sym(var)
         print(groupedMean(!!var))
    }
    # A tibble: 3 x 2
    #    cyl `mean(mpg)`
    #  <dbl>       <dbl>
    #1     4    26.66364
    #2     6    19.74286
    #3     8    15.10000
    # A tibble: 3 x 2
    #   gear `mean(mpg)`
    #  <dbl>       <dbl>
    #1     3    16.10667
    #2     4    24.53333
    #3     5    21.38000
    

    代替printing,供以后使用,输出可以存储在list

    lst <- setNames(vector('list', length(groupFields)), groupFields)
    for(var in groupFields){
       var <- rlang::sym(var)
       lst[[var]] <- groupedMean(!!var)
    }
    lst
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 2021-05-21
      • 2020-03-31
      • 2017-07-15
      • 1970-01-01
      相关资源
      最近更新 更多