【问题标题】:Curly curly not recognizing quoted data卷曲卷曲无法识别引用的数据
【发布时间】:2021-03-22 05:22:20
【问题描述】:

我想用purrr:map2 将两个向量输入到我的自定义函数中。不幸的是,当我这样做时,我收到错误 Error: Problem with `filter()` input `..2`. x Input `..2` must be of size 93 or 1, not size 9. ℹ Input `..2` is `!is.na(y)`.

如何让我的自定义函数将参数用作数据并使用 map2 成功运行?

这是一个 MWE:

library(MASS)
data(Cars93)

crosstab_3way_custom <- function(y, z) {
pollster::crosstab_3way(Cars93, 
                x = Origin, 
                y= {{ y }}, 
                z = {{ z }},
                weight = rep(1, NROW(Cars93)),
                pct_type = "row")
}

combos <- expand.grid(c("Manufacturer", "Model", "Type"), c("Min.Price", "Price", "Max.Price"))
combos <- combos %>% map(as.character)

map2(combos[1], combos[2], function(y,z) crosstab_3way_custom(y,z))

【问题讨论】:

  • Cars93 来自MASS 包吗?对于一个没有 map 的例子,你如何运行这个? crosstab_3way(df = MASS::Cars93, x = Origin, y = Manufacturer,z = Min.Price) 这会返回一个错误。
  • 我没有意识到需要权重。我刚刚添加了一些,它现在应该适用于个别情况。是的,Cars93 来自 MASS 包。

标签: r purrr rlang


【解决方案1】:

要传递带引号的变量,请使用 sym!!

crosstab_3way_custom <- function(y, z) {
  pollster::crosstab_3way(data, 
                          x = Origin, 
                          y = !!sym(y),
                          z = !!sym(z),
                          weight = 1,
                          pct_type = "row")
}

purrr::map2(combos$Var1, combos$Var2, crosstab_3way_custom)

【讨论】:

  • 像魅力一样工作。我发现 quasiquotation 很难理解。你能解释一下你为什么选择 sym 函数吗?
  • {{}} 主要处理不带引号的数据,这里我们有 sym 有用的字符串。
  • 但在这种情况下,它不适用于不在引号中的名称?对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2012-12-15
  • 1970-01-01
  • 2010-12-10
  • 2017-03-27
  • 2019-10-14
相关资源
最近更新 更多