R中的多个输出文件名

时间:2013-02-01 17:17:09

标签: r output

我遇到了下面编写的代码问题。我需要为输入矩阵(aa)的每一行计算距离矩阵,并将结果保存在rowname为filename的文件中。 aa矩阵是100x100,但测试矩阵如下所示:

ID  A   B   C   D
AA  0.5 0.4 0.9 0.5
BB  0.2 0.1 0.8 0.96
CC  0.3 0.5 0.8 0.4
DD  0.1 0.4 0.5 0.78

实际上,我希望为包含距离矩阵的每一行获取一个文件,并将“AA.txt”和“BB.txt”以及“CC.txt”和“DD.txt”作为文件名。

a<- read.table ("test_matrix.txt", header = TRUE)
aa<- structure (a, class = "data.frame")
d_ply(aa, 1, function(row){
cu<- dist(as.numeric(row))
cucu<- as.matrix(cu)
write.table(cucu, quote = TRUE, file = paste(row$ID, "txt", sep = "."), sep = "\t")
}, .progress='text', .print = TRUE)

使用上面的代码我获得了正确的文件名,但内容不正确,因为我有一个5x5矩阵而不是4x4矩阵。谁能告诉我哪个是问题?我想在阅读标题时有些事情...... 谢谢!

1 个答案:

答案 0 :(得分:1)

当我运行你的代码时,输​​出如下:

"1" "2" "3" "4" "5"
"1" 0   NA  NA  NA  NA
"2" NA  0   0.1 0.4 0
"3" NA  0.1 0   0.5 0.1
"4" NA  0.4 0.5 0   0.4
"5" NA  0   0.1 0.4 0

你需要调整你的功能以包括我和Joran的建议:

myfun <- function(row) {
  cu<- dist(as.numeric(row[-1]))
  cucu<- as.matrix(cu)
  write.table(cucu, file=paste(row$ID, 'txt', sep='.'), sep='\t', quote=TRUE, row.names=FALSE, col.names=FALSE)
}

运行d_ply(aa, 1, myfun, .print=TRUE)会显示如下文件:

0   0.1 0.4 0
0.1 0   0.5 0.1
0.4 0.5 0   0.4
0   0.1 0.4 0