将参数列表传递给 ggstatsplot 函数

Pass list of arguments to ggstatsplot function

提问人:Nathan Stutzman 提问时间:9/14/2023 最后编辑:zx8754Nathan Stutzman 更新时间:9/14/2023 访问量:46

问:

我正在使用 ggstatsplot 制作许多相似的图,但绘制的确切数据或变量在每个图之间会有所不同。我想将大多数(常量)参数分配给一个变量,我可以为每个图调用该变量。这样,如果我想更新所有情节的论点,我只需要在一个地方更改它(即尽量不重复自己)。

根据这个 StackOverflow 解决方案,我尝试了两种方法。

第一次尝试:[编辑以在 c() 中添加 list(),它给出了与尝试 2 相同的错误]

    Def_Args2 <- list(
  pairwise.display = "significant",
  plot.type = "box",
  results.subtitle = FALSE, # Remove freq stat subtitle
  violin.args = list(alpha = 0), # Remove violin
  point.args = list(alpha = 0), # Remove points (unless can do beeswarm here?)
  boxplot.args = list(notch = TRUE,
                      width = 0.4,
                      alpha = 0.5,
                      aes(fill = Treatment)
                      ),
  pairwise.comparisons = TRUE,
  centrality.plotting = FALSE, # Don't plot mean
  bf.message = FALSE # Remove Bayes stat subtitle
)

do.call(ggbetweenstats,
   c(
     list(
       data = FluorByTreatment_Fltr_Iter3.tdf,
       x = FluorByTreatment_Fltr_Iter3.tdf$Treatment,
       y = FluorByTreatment_Fltr_Iter3.tdf$Area,
       type = "parametric", # ANOVA or Kruskal-Wallis
       var.equal = FALSE), # ANOVA or Welch ANOVA
     Def_Args2
     )
   )

第二次尝试:

    Def_Args1 <- list(
  data = FluorByTreatment_Fltr_Iter3.tdf,
  x = FluorByTreatment_Fltr_Iter3.tdf$Treatment,
  y = FluorByTreatment_Fltr_Iter3.tdf$Area,
  type = "parametric", # ANOVA or Kruskal-Wallis
  var.equal = FALSE, # ANOVA or Welch ANOVA
  pairwise.display = "significant",
  plot.type = "box",
  results.subtitle = FALSE, # Remove freq stat subtitle
  violin.args = list(alpha = 0), # Remove violin
  point.args = list(alpha = 0), # Remove points (unless can do beeswarm here?)
  boxplot.args = list(notch = TRUE,
                      width = 0.4,
                      alpha = 0.5,
                      aes(fill = Treatment)
                      ),
  pairwise.comparisons = TRUE,
  centrality.plotting = FALSE, # Don't plot mean
  bf.message = FALSE # Remove Bayes stat subtitle
)

exec(ggbetweenstats, !!!Def_Args1)

两者都给出错误:

ensym(x) 中的错误

我的猜测是某些参数与这些输入法不兼容。有没有其他输入法可以尝试?还是我应该放弃希望?谢谢!

Reddit交叉发布

r 参数传递 GGStstatsplot

评论


答:

4赞 Till 9/14/2023 #1

您可以围绕它编写一个自定义函数,该函数接受 那些因情节而异的参数的参数 (data, x, y, type, var.equal)。其他参数可以硬编码为 函数。当您想要更改所有绘图的参数值时,可以修改函数代码。如果您后来注意到您想改变一些 硬编码参数,您可以将这些参数作为参数添加到自定义函数中。ggbetweestats()ggbetweenstats()

在下面的示例中,我添加了一个默认值的参数 值“显著”。这意味着,如果您不指定该参数,它将 默认为“显著”,但如果您想更改某些绘图的它, 您可以在函数调用中指定另一个值(请参阅示例中的第 2 次调用。pairwise.displaycustom_ggbs()

由于您没有共享数据,因此我下面的示例使用同名包中的数据集。gapminder

library(ggstatsplot)
library(gapminder)

custom_ggbs <- 
  function(data, 
           x, 
           y, 
           type, 
           var.equal, 
           pairwise.display = "significant") ggbetweenstats(
              data = data,
              x = {{x}},
              y = {{y}},
              type = type,
              var.equal = var.equal,
              pairwise.display = "significant",
              plot.type = "box",
              results.subtitle = FALSE, 
              violin.args = list(alpha = 0), 
              point.args = list(alpha = 0), 
              pairwise.comparisons = TRUE,
              centrality.plotting = FALSE,
              bf.message = FALSE 
            )

custom_ggbs(data = gapminder,
            x = continent,
            y = lifeExp,
            type = "parametric",
            var.equal = FALSE)


custom_ggbs(data = gapminder,
            x = continent,
            y = gdpPercap,
            type = "parametric",
            var.equal = FALSE,
            pairwise.display = "all")