在R

时间:2018-01-18 10:46:13

标签: r loops testing

我有一个文件,我想在R中使用Whitney-U测试。

file1_whitneyinput
mismatch    match
0.166737436882143   8.09322497846657
8.65473982362       0.262366658627097
0.0499563   
1.258946118432  
0.466852    
0.224554    
2.59762 
0.654455    

而且,我有其他类似格式的文件,但有些文件没有任何匹配或不匹配列(只有一个):

file2_whitneyinput
mismatch    match
2.736882143         4.09322497846657
0.651739833072362   0.26236673764384
0.0494545453    
0.1445666119
3.463852    
0.2100
0.56762 

file3_whitneyinput
mismatch    
2.336882143        
0.35173
3.043   
0.145666119

file4_whitneyinput
match   
0.913       
0.3517      
2.033   
0.8872
0.112

并且有file5_whitneyinput等等。

我要做的是分析所有这些内容,并将文件名和U-test的输出写在同一个文件中,如下所示:

file1_whitneyinput
Wilcoxon rank sum test

data:  ldf$match and ldf$mismatch
W = 11, p-value = 0.7273
alternative hypothesis: true location shift is not equal to 0
###########################
file2_whitneyinput
Wilcoxon rank sum test

data:  ldf$match and ldf$mismatch
W = 10, p-value = 0.5273
alternative hypothesis: true location shift is not equal to 0

我现在所做的只使用第一个文件然后停止,我无法打印文件的名称:

library(data.table)
filenames <- list.files("./TRIAL", pattern="*whitneyinput", full.names=TRUE)
for(file in filenames){
     library(tools)
     bases <- file_path_sans_ext(file)
     ldf <- fread(file)
     output <-  wilcox.test(ldf$match , ldf$mismatch, paired=FALSE)
     chars <- capture.output(print(output))
     writeLines(chars, con = file("output.txt"))

}
dev.off()

它给出了输出:

Wilcoxon rank sum test

    data:  ldf$match and ldf$mismatch
    W = 11, p-value = 0.7273
    alternative hypothesis: true location shift is not equal to 0

我试图用以下方式管理它:

writeLines(chars, con = basename(file("output.txt")))

但是,它没有给出任何意见。

如何在同一个文件中按顺序打印文件名及其分析结果?

Plus:结果也可以写在不同的文件中。我已经尝试将dev.off放在循环内部,但也没有用。

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

rezults <- lapply(filenames, function(x) {
  print(which(filenames == x))
  ldf <- fread(x)
  if (all(c("match", "mismatch") %in% colnames(ldf))) {
    output <-  wilcox.test(ldf$match , ldf$mismatch, paired=FALSE)
  } else {
    output <- "No data"
  }
  chars <- capture.output(print(output))
  chars
  }
)


rez <- lapply(seq_along(rezults), function(x) {
  c("filename is:", filenames[x], rezults[[x]])
  }
)
rez

writeLines(unlist(rez), con = file("output.txt"))