我正在使用这个例子data.frame和代码.我想在两个组之间进行多个测试,但当一个组中没有数据时,会导致错误.我如何在没有两个组的情况下跳过比较,并仍然在另一个组上运行代码?

 library(dplyr)
 df <- data.frame(group=c(rep(0,10),rep(1,10)),
      apple = as.numeric(c(runif(20, -1, 18))),
      pear = as.numeric(c(rep("NA",12), runif(8, 2, 7))),
      banana = as.numeric(c(runif(10, 1, 3), runif(10, 2.5, 6))),
      cherry = as.numeric(c(runif(9, 5, 12), rep("NA",11))))
 df_new <- df %>% summarise(across(!group, ~wilcox.test(.x ~ group)$p.value), exact=NULL) %>%
         bind_rows(., p.adjust(., method = 'BH')) %>%
         bind_rows(df, .) %>%
         mutate(group=replace(group, is.na(group), c('p.values', 'adjusted_p.values')))
 # Error in `summarise()`:
 # ! Problem while computing `..1 = across(!group, ~wilcox.test(.x ~ group)$p.value)`.
 # Caused by error in `across()`:
 # ! Problem while computing column `pear`.
 # Caused by error in `wilcox.test.formula()`:
 # ! grouping factor must have exactly 2 levels
 # Run `rlang::last_error()` to see where the error occurred.

推荐答案

正如 comments 中链接的问题中所说,您可以在across()中的函数中使用try()tryCatch()来静默捕获错误.基本上,它说"如果没有错误,则返回结果(本例中的p值),如果有错误,则转到下一个变量".

df_new <- df %>%
  summarise(
    across(
      !group, 
      function(x) {
        out <- try(wilcox.test(x ~ group)$p.value, silent = TRUE)
        if (!inherits(out, "try-error")) {
          return(out)
        }
      } 
    ), 
    exact = NULL
  ) %>%
  bind_rows(., p.adjust(., method = "BH")) %>%
  bind_rows(df, .) %>%
  mutate(group = replace(group, is.na(group), c("p.values", "adjusted_p.values")))

df_new
#>                group      apple     pear       banana    cherry
#> 1                  0  7.8559712       NA 2.085272e+00  8.606734
#> 2                  0 10.3555136       NA 1.021946e+00  9.759360
#> 3                  0 10.9658917       NA 2.839778e+00  7.334473
#> 4                  0  1.5944729       NA 2.371802e+00  7.262835
#> 5                  0  7.6975703       NA 1.805847e+00  7.527016
#> 6                  0 14.3173630       NA 2.029271e+00 10.610466
#> 7                  0  6.0701846       NA 1.681383e+00  6.397823
#> 8                  0 14.9290293       NA 1.668531e+00 10.541239
#> 9                  0 11.0102237       NA 2.202353e+00  8.274926
#> 10                 0  6.6343644       NA 2.613700e+00        NA
#> 11                 1 10.9747881       NA 3.660303e+00        NA
#> 12                 1 14.5043713       NA 3.064596e+00        NA
#> 13                 1  5.3523349 4.165088 3.441590e+00        NA
#> 14                 1 12.9285923 5.586389 3.768061e+00        NA
#> 15                 1  9.0848274 4.119166 3.706076e+00        NA
#> 16                 1  1.3605938 2.721709 3.894040e+00        NA
#> 17                 1  1.8937699 6.235140 2.826658e+00        NA
#> 18                 1 15.5570770 3.414619 2.702846e+00        NA
#> 19                 1  0.6901305 6.319984 3.219524e+00        NA
#> 20                 1 15.1907810 4.879057 4.147871e+00        NA
#> 21          p.values  0.9705125       NA 4.330035e-05        NA
#> 22 adjusted_p.values  0.9705125       NA 8.660071e-05        NA

reprex package(v2.0.1)于2022-08-11创建

R相关问答推荐

R -列表元素中所有命名项的总和

按自定义数字模式对变量名称排序

在水平条形图中zoom x_轴

保存shiny 的代码嗅探器:避免$ Symbol问题

导入到固定列宽的R中时出现问题

用单个表达匹配多个替代模式

在特定列上滞后n行,同时扩展框架的长度

使用ggplot将平滑线添加到条形图

selectInput不返回ALL,并将因子转换为shiny 的数字

筛选出以特定顺序患病的个体

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

如果可能,将数字列转换为整数,否则保留为数字

从多面条形图中删除可变部分

R:如果为NA,则根据条件,使用列名模式将缺少的值替换为另一列中的值

SHILINY中DT列的条件着色

计算Mean by分组和绑定到R中的数据集

当由base::限定时,`[.factor`引发NextMethod错误

名字的模糊匹配

使用同一行中的前一个值填充R矩阵中的缺失值

如何在shiny 的应用程序 map 视图宣传单中可视化单点