我正在尝试将
plot_ly
条形图放入函数内,以便我可以在需要时更改要绘制的变量。该代码在函数外部完美运行,但在函数内部的上下文中不起作用。
问题是 plot_ly
条形图不再将 x 变量视为 factor
,尽管它是 factor
中的 data.frame
(测试后验证)。
另外,如果能解释一下为什么我必须使用
enquo()
和 {{}}
分别解析 dplyr
上下文和 plotly
上下文中的变量,我们将不胜感激。
代码(评论是尝试恢复因子):
library(plotly)
library(dplyr)
n <- 100
df <- data.frame(x = as.factor(sample(1:3, n, replace = T)),
y = rnorm(n))
summary_plot <- function(df, var){
quo_var <- enquo(var)
data.frame(df %>%
group_by({{var}}) %>%
summarise(n = n())) %>%
plot_ly(
# x = ~as.factor(quo_var),
# x = as.factor(~quo_var),
x = ~quo_var,
y = ~n,
type = "bar"
)
}
summary_plot(df, x)
我无法重现您的错误。当我使用数字或字母时,它对我来说也是一个因素。也许尝试更新您的
plotly::
、ggplot::
和 dplyr::
软件包?
enquo()
需要引用函数参数中保存的变量,否则 group_by 和plotly 将在数据集中查找名为 var
的列并失败。将其传递给内部函数的正常方法是 !!quo_var
但由于 plot_ly()
使用公式符号在数据框中使用 x = ~..
查找变量,因此您不需要 !!
,您也可以使用 x = quo_var
而不使用 ~
group_by()
有一个快捷方式,可以通过直接使用 enquo() .. !!.
作为方便的简写来避免 {{var}}
工作流程当函数参数中有数据变量(即包含 Promise2 的环境变量)时,您需要用双大括号括住该参数,例如 filter(df, {{ var }})。 使用 dplyr/间接部分进行编程