【发布时间】:2017-02-03 08:58:43
【问题描述】:
我必须为几个实验计算所谓的竞争指数。我知道物体的位置及其大小。我想计算某个半径内的大小总和以及到该半径内对象的距离总和。数据示例在这里:
set.seed(13181938)
df <- data.frame(exp = rep(LETTERS[1:20], each = 100), x = rnorm(1000, 100, 50),
y = rnorm(1000, 100, 50), di = rnorm(5, 2, 2))
df$comp1 <- 0
df$dist <- 0
我使用循环进行计算,但完成 1000 个对象的计算需要很长时间。在真实数据集中,我有超过 10000 个对象。
fori <- function(x) {
for (i in 1:nrow(x)){
for (j in 1:nrow(x)){
dist = sqrt((x$x[j] - x$x[i])^2 + (x$y[j] - x$y[i])^2)
#print(paste(x$exp[i], x$exp[j], dist))
if(dist < 2 & x$exp[i] == x$exp[j]){
x$comp1[i] = x$comp1[i] + x$di[j]
x$dist[i] = x$dist[i] + dist
}
}
}
df <- data.frame(x)
return(df)
}
abc <- fori(df)
为示例运行此循环需要很长时间,这意味着整个数据集将花费更多时间。你能建议任何其他方式吗?我尝试了apply 和DT,但没有成功。
【问题讨论】: