0

我在下面编写的代码有问题。我需要为输入矩阵 (aa) 的每一行计算距离矩阵,并将结果保存在以行名作为文件名的文件中。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 矩阵。有人可以告诉我是哪个问题吗?我想在阅读标题时有些东西......谢谢!

4

1 回答 1

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
于 2013-02-01T17:40:01.007 回答