【发布时间】:2015-03-18 17:11:25
【问题描述】:
这是在此链接中回答的问题的下一步 [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
}
由于我必须对大量物种重复该操作,我想知道是否有人有更有效的解决方案,也许使用矢量化表达式。
亲切的问候。
【问题讨论】:
-
代码优化问题应该在 CodeReview 上提问,而不是 StackOverflow codereview.stackexchange.com
-
@Hack-R 你有相关的元问题来支持这个说法吗?