我遇到了下面编写的代码问题。我需要为输入矩阵(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矩阵。谁能告诉我哪个是问题?我想在阅读标题时有些事情...... 谢谢!
答案 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