【问题标题】:Tidy Eval: Using '=' inside of quoTidy Eval:在 quo 中使用 '='
【发布时间】:2019-03-29 10:18:42
【问题描述】:

刚刚进入 tidy eval 并希望将其应用于我当前的项目之一。

我知道您可以像这样定义表达式以传递给 tidyverse 函数,例如:

library(rlang)
library(tidyverse)

my.filter <- quo(species=='Human')
my.summary <- quo(mean(height, na.rm=T))

starwars %>%
  filter(!!my.filter) %>%
   summarise(!!my.summary)

但是,如果我想重命名汇总列怎么办?对 Avg_Ht 说?如果我在 quo() 函数中尝试这个:

    my.summary <- quo(Avg_Ht=mean(height, na.rm=T))

我被击中了:

Error in quo(Avg_Ht = mean(height, na.rm = T)) : 
  unused argument (Avg_Ht = mean(height, na.rm = T))

这里有什么帮助吗?

谢谢!

【问题讨论】:

    标签: r dplyr tidyverse tidyr tidyeval


    【解决方案1】:

    阅读此github issue 后,您似乎可以使用quos!!! 来执行此操作。

    我最初使用:= 来分配名称

    my.summary <- quos(Avg_Ht := mean(height, na.rm=T))
    

    但事实证明这没有必要。

    my.summary <- quos(Avg_Ht = mean(height, na.rm=T))
    
    starwars %>%
         filter(!!my.filter) %>%
         summarise(!!!my.summary)
    
    # A tibble: 1 x 1
      Avg_Ht
       <dbl>
    1   177.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 2020-10-23
      • 2018-08-11
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多