R ggpubr 使用全局环境对象?

R ggpubr use global environment objects?

我想使用 ggpubr 包引用在我的全局环境中的字符串中列出的数据框列名,但 ggpubr 似乎不接受变量,只接受硬编码的列名。有没有办法可以进行任何更改,以便它可以做到这一点?

vars = c('var1', 'var2')
controls = c('a', 'w')

df = data.frame(subject = 1:100,
                value = rnorm(100, 100, 10),
                var1 = rep(c('a', 'b'), 50),
                var2 = rep(c('w', 'x', 'y', 'z'), 25))

library(ggpubr)

compare_means(value ~ vars, df, ref.group = 'a')

但我希望能够将 'vars' 替换为 var[1]、var[2] 等,同样适用于 ref.group = controls[1]、controls[2]。我可以让 ggpubr 引用全局环境对象而不是直接将输入作为列名吗?

我们可以使用reformulate

library(ggpubr)
fml <- reformulate(vars[1], 'value')
compare_means(fml , df, ref.group = controls[1])
# A tibble: 1 x 8
#  .y.   group1 group2     p p.adj p.format p.signif method  
#  <chr> <chr>  <chr>  <dbl> <dbl> <chr>    <chr>    <chr>   
#1 value a      b      0.537  0.54 0.54     ns       Wilcoxon

并且对于使用相应值的多个元素,使用 base R

中的 Map
Map(function(x, y) compare_means(reformulate(x, 'value'), df, 
       ref.group = y), vars, controls)

map2 来自 purrr

library(purrr)
map2(vars, controls, ~ compare_means(reformulate(.x, 'value'), df,
            ref.group = .y))
#[[1]]
# A tibble: 1 x 8
#  .y.   group1 group2     p p.adj p.format p.signif method  
#  <chr> <chr>  <chr>  <dbl> <dbl> <chr>    <chr>    <chr>   
#1 value a      b      0.537  0.54 0.54     ns       Wilcoxon

#[[2]]
# A tibble: 3 x 8
#  .y.   group1 group2     p p.adj p.format p.signif method  
#  <chr> <chr>  <chr>  <dbl> <dbl> <chr>    <chr>    <chr>   
#1 value w      x      0.126  0.38 0.13     ns       Wilcoxon
#2 value w      y      0.985  1    0.98     ns       Wilcoxon
#3 value w      z      0.969  1    0.97     ns       Wilcoxon