2015-06-25 143 views
0

我對這個平臺很陌生,希望有人能幫助我解決這個問題。 我需要替換以下環路某種應用功能,因爲它運行得太慢。替換R中的循環

X = dim(m) 
Y_TFIDF = matrix(0, X[1], X[2]) 


for (i in 1 : X[1]) { 

    maxNumTerms = which(m[i, ] > 0) 
    docSize = sum(m[i, maxNumTerms]) 

    for (j in 1 : X[2]) { 

    if (m[i, j] > 0) { 
     DF = length(m[ which(m[ ,j] > 0) ]) 
     Y_TFIDF[i, j] = (m[i, j]/docSize) * log(X[1]/(1 + DF))  
    } 
    else { 
     Y_TFIDF[i, j] = 0 
    } 
    } 
} 

謝謝你的幫忙。

+0

爲什麼你認爲'申請'會比'for'循環更快嗎? –

+0

嗨,還有其他想法嗎? – Clemens

+3

如果沒有真實的示例數據和您期望的輸出,我們無法真正幫助您。 –

回答

0

我不知道我是否正確讀取你的代碼,但也許這可以工作:

#creating a random m 
m<-matrix(runif(100*30,-1,1),nrow=100) 
docsize<-rowSums(m*(m>0)) 
docsize[docsize==0]<-1 
res1<-m/docsize*log(nrow(m)/(1+rep(colSums(m>0),each=nrow(m))))*(m>0) 

追隨你的代碼,並建立Y_TFIDF它的結果:

identical(res1,Y_TFIDF) 
#[1] TRUE 
+0

哇,看起來不錯。我會測試它......謝謝:) – Clemens

+0

似乎是正確的,但現在有一些填充NA的行,它在「相同()」中產生FALSE – Clemens

+0

矩陣「m」中沒有NAs,所以我想知道他們是如何生產的? – Clemens