2

在 R 中,我试图创建一个具有各种 p 值的向量,如下面的代码所示,但wilcox.test无法确定四个 p 值之一,因为只有一个类别。如何使代码工作,以便在无法执行NA时生成带有 an 的向量?wilcox.test

 set.seed(12345)
 df <- data.frame(
             a = c(rep("a", 5), rep("b", 4), rep("c", 6), rep("d", 10)),
             b = as.factor(c(1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0)),
             c = rnorm(25, 10, 6),
             stringsAsFactors = FALSE)
 x <- c("a", "b", "c", "d")
 vec <- vector()
 for (i in x) {
      vec <- c(vec, wilcox.test(c~b, data = df[df$a == i,])$p.val)
      }
4

2 回答 2

3

你可以使用tryCatch

library(tidyverse)
df %>%
  group_split(a) %>% 
    lapply(., function(x) {
      tryCatch(expr = wilcox.test(formula = c~b, data = x)$p.value, error = function(e) NA)
    }) %>% unlist



[1] 1.000000       NA 1.000000 0.352381
于 2020-10-27T10:46:48.950 回答
0

我刚刚找到了一种方法:

 for (i in x) {
     vec <- c(vec, tryCatch(wilcox.test(c~b, data = df[df$a == i,])$p.val, error=function(err) NA))
  }
于 2020-10-27T10:53:18.073 回答