R错误Wilcoxon测试数据帧的循环:不够(有限)'x'观察

时间:2018-03-09 19:38:15

标签: r dataframe statistics

我有一个数据框,其中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")
    }
}

任何帮助将不胜感激,谢谢!

1 个答案:

答案 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)
    )
)