将参数列表传递给 ggstatsplot 函数

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

我正在使用 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 arguments parameter-passing pass-by-reference ggstatsplot
1个回答
2
投票

您可以围绕

ggbetweestats()
编写一个接受的自定义函数 那些
ggbetweenstats()
的参数 - 随情节变化的参数 (数据,x,y,类型,var.equal)。其他参数可以硬编码到 功能。当您想要更改所有绘图的参数值时,可以修改函数代码。如果您后来发现想要更改某些 硬编码参数,您可以将它们作为参数添加到自定义函数中。

在下面的示例中,我添加了

pairwise.display
作为具有默认值的参数 值“显着”。这意味着如果您不指定该参数,它将 默认为“显着”,但如果您想更改某些图, 您可以在函数调用中指定另一个值(请参阅示例中的第二个
custom_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")

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