我有一个数据框,其中15 x 555的行方式样本编号与列式蛋白质名称相对应。此数据框的最后3列包含映射信息,即Treatment,Treatment_Time和Month,并标记为。
在逐列循环数据框架时,我希望使用wilcoxon.test进行wilcoxon测试,并根据映射信息直接从df中获取信息。
粗略的前:
pre_post <- vector()
for(i in names(df[,1:552])){
pre_post <- append(pre_post, wilcox.test(df[df$Treatment_Time %in% "Pre", i], df[df$Treatment_Time %in% "Post", i], na.action(na.omit))$p.value))}
期望有一个p值为wilxcoxon测试长度为552的向量。如果wilcoxon测试无法按预期完成,我希望输入和“NA”。
此脚本有效,直到特定列没有像Post这样的数据子集的值,然后传递上述错误。我已经尝试使用if else语句来对抗测试列中数据子集的长度,但我无法使其工作。
for(i in names(df[,1:552])){
if(length(df[df$Treatment_Time %in% "Pre", i])>1 & length(df[df$Treatment_Time %in% "Post", i])>1){
pre_post <- append(pre_post, wilcox.test(df[df$Treatment_Time %in% "Pre", i], df[df$Treatment_Time %in% "Post", i], na.action(na.omit))$p.value)
}
else{
all_amb_all_delay <- append(all_amb_all_delay, "NA")
}
}
任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
考虑tryCatch
在零行的过滤器上返回NA,从而导致错误wilcox.test
。下面使用sapply
在向量中返回p值。
p_value_vector <- sapply(names(df[,1:552]), function(i)
tryCatch(
wilcox.test(df[df$Treatment_Time %in% "Pre", i],
df[df$Treatment_Time %in% "Post", i],
na.action(na.omit))$p.value),
warning = function(w) return(NA),
error = function (e) return(NA)
)
)