2015-06-25 92 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