繁体   English   中英

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')

但我希望能够用 var[1]、var[2] 等替换 'vars',同样对于 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)

或者使用来自purrr map2

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM