我有一个文件,我想在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放在循环内部,但也没有用。
答案 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"))