如何解决R - 在 plot_ly 中组合 tidy 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)
似乎在同一个函数调用中使用 tidy eval 和 plot_ly 波浪号公式会以某种方式导致 tidy eval 出现问题?我想了解为什么以防止将来出现错误。有没有办法在同一个函数调用中仍然使用它们?我找到了 this 替代方案:
h <- function(.data,expr) {
rlang::eval_tidy(
rlang::quo_squash(quo({
plot_ly(.data %>% filter({{ expr }}),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 的前身。这有点可疑,可能值得在 plotly repo 中提交错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。