在R中替换for循环

时间:2015-06-25 10:11:02

标签: r

我是这个平台的新手,我希望有人可以在这个问题上帮助我。 我需要通过某种 apply 函数替换以下 for loops ,因为它运行速度太慢。

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
     }
   }
 }  

感谢您的帮助。

1 个答案:

答案 0 :(得分: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