在 R 中的函数内使用plot_ly 时如何维护因子

问题描述 投票:0回答:1

我正在尝试将

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)

r function dplyr plotly r-factor
1个回答
0
投票

我无法重现您的错误。当我使用数字或字母时,它对我来说也是一个因素。也许尝试更新您的

plotly::
ggplot::
dplyr::
软件包?

  • enquo()
    需要引用函数参数中保存的变量,否则 group_by 和plotly 将在数据集中查找名为
    var
    的列并失败。将其传递给内部函数的正常方法是
    !!quo_var
    但由于
    plot_ly()
    使用公式符号在数据框中使用
    x = ~..
    查找变量,因此您不需要
    !!
    ,您也可以使用
    x = quo_var
    而不使用
    ~
  • 现在,作为 tidyverse 一部分的
    group_by()
    有一个快捷方式,可以通过直接使用
    enquo() .. !!.
    作为方便的简写来避免
    {{var}}
    工作流程

当函数参数中有数据变量(即包含 Promise2 的环境变量)时,您需要用双大括号括住该参数,例如 filter(df, {{ var }})。 使用 dplyr/间接部分进行编程

© www.soinside.com 2019 - 2024. All rights reserved.