问题描述
在R中,我试图创建一个具有各种p值的向量,如下面的代码所示,但是由于只有一个类别,因此无法确定四个wilcox.test
p值之一。我该如何使代码工作,以便在无法执行NA
时使用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)),c = rnorm(25,10,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)
}
解决方法
您可以使用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
,
我刚刚找到了一种方法:
for (i in x) {
vec <- c(vec,tryCatch(wilcox.test(c~b,data = df[df$a == i,])$p.val,error=function(err) NA))
}