下面是在这个链接上回答的问题的下一步[在r](https://stackoverflow.com/questions/29125609/apply-function-too-slow-in-r)中应用函数太慢了
我得为很多物种计算一排特定的公式。该公式对应于方差计算,因此需要在上述链接中得到的结果。
我当前的脚本包括使用for-循环,这自然是非常慢的。我在下面的脚本中使用一个名为az的简单df简化了这个问题。
az=data.frame(c(1,2,10),c(2,4,20),c(3,6,30))
colnames(az)=c("a","b","c")
# Necessary number calculated in step 1 (see link above)
m <- as.matrix(az)
m[is.na(m)] <- 0 #remove NA from sums
step1 = as.vector(m %*% m[nrow(m),])
# Initial for loop
prov=0 # prov for provisional number
for (i in 1:nrow(az)){
for (j in 1:ncol(az)){
prov=prov+az[i,j]*az[nrow(az),j]
prov=prov+az[i,j]*(az[nrow(az),j]-step1[i])^2
}
print(prov)
prov=0
}由于我不得不对大量物种重复这个操作,我想知道是否有人有一个更有效的解决方案,也许使用矢量化的表达式。
致以亲切的问候。
发布于 2015-03-18 17:26:55
此代码将返回与您的代码输出的值相同的值,但效率更高。
> n<-nrow(m)
> mm<-t(m)
> prov<-mm*mm[,n]
> prov<-prov+mm*(mm[,n]-step1[col(mm)])^2
> colSums(prov)
[1] 82140 791480 113717400https://stackoverflow.com/questions/29128432
复制相似问题