2013-02-01 23 views
0

我在下面編寫的代碼遇到問題。我需要爲我的輸入矩陣(aa)的每一行計算距離矩陣,並將結果保存在rowname作爲文件名的文件中。 的AA矩陣是100×100,但是測試矩陣是這樣的:R中的多個輸出文件名稱

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 

Pratically我想獲得一個文件用於包含距離矩陣的每一行,並以「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

你想在你的寫步驟'row.names = FALSE'。文本文件中的第一列是輸出矩陣的行名稱。 (個人,我認爲它是一個奇怪的默認值!) – Justin

+1

@Justin其實,我認爲他們需要做'as.numeric(row [-1])'去除ID列的值之前,任何工作。 (還有一個錯字:hader應該是標題)。 – joran

+0

我在read.table中收到一個錯誤我添加row.names = FALSE – Gabelins

回答

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 
+0

YEeeeeeeeeeeees!它工作的很好! – Gabelins

相關問題