【问题标题】:R - error combining tidy eval and tilde in plot_lyR - 在 plot_ly 中结合 tidy eval 和 tilde 时出错
【发布时间】:2021-02-22 11:58:11
【问题描述】:

我无法理解以下代码返回错误的原因:

d <- tibble(a = 1:10, x = 1:10, y = 1:10)
f <- function(.data, expr) {
    plot_ly(.data %>% filter({{ expr }}), x = ~x, y = ~y) %>% add_markers()
}

f(d, a <= 5)

# "Error in as.list.environment(x, all.names = TRUE) : object 'a' not found"

但这按预期运行:

g <- function(.data, expr) {
    plot_ly(.data %>% filter({{ expr }})) %>% add_markers(x = ~x, y = ~y)
}

g(d, a <= 5)

似乎在同一个函数调用中使用 tidy eval 和 plot_ly 波浪号公式会导致 tidy eval 出现问题?我想了解为什么以防止将来出现错误。有没有办法在同一个函数调用中仍然使用它们?我找到了this 替代方案:

h <- function(.data, expr) {
    rlang::eval_tidy(
        rlang::quo_squash(quo({
            plot_ly(.data %>% filter({{ expr }}), x = ~x, y = ~y) %>% add_markers()
        }))
    )
}

h(d, a <= 5)

但我宁愿使用上面的第二种形式 g()

【问题讨论】:

    标签: r plotly tidyeval


    【解决方案1】:

    您链接到的第二种形式没有多大意义,我会避免它。

    如果我这样重写你的函数,它似乎可以工作:

    f <- function(.data, expr) {
      .data %>%
        filter({{ expr }}) %>%
        plot_ly(
          x = ~x,
          y = ~y
        ) %>%
        add_markers()
    }
    

    不知道为什么。

    当我为您帖子中的错误打印回溯时,我看到 plotly 仍在后台使用lazyeval,它是 tidy eval 的前身。这有点可疑,可能值得在 plotly repo 中提交一个错误。

    【讨论】:

    • 谢谢,我会提交错误报告。
    猜你喜欢
    • 1970-01-01
    • 2020-09-17
    • 2019-03-29
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2018-07-19
    • 2017-11-26
    相关资源
    最近更新 更多