R -在plot_ly中合并整齐eval和波浪的错误



我很难理解为什么下面的代码返回一个错误:

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)

似乎在同一个函数调用中使用整洁的eval和plot_ly波浪公式会导致整洁的eval出现问题?我想知道为什么,以防止未来的错误。是否有一种方法可以在同一个函数调用中使用它们?我找到了这个选择:

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()

你链接到的第二个表单没有多大意义,我会避免它。

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

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

不知道为什么。

当我在你的帖子中打印一个错误的回溯时,我看到plotly仍然在使用lazyeval,它是tidy eval的前身。这有点可疑,也许值得在plot的repo中提交一个bug。

最新更新