, 100- . , , , , . .
library(RANN)
library(data.table)
set.seed(1L)
DATA <- data.table(runif(10000, 0,1),
runif(10000, 0,1),
runif(10000, 0,1),
runif(10000, 10,30))
colnames(DATA)<-c("x","y","z","P")
nn.idx <- nn2(DATA[,1:3], DATA[,1:3], k=50,
treetype = "kd", searchtype = "radius",
radius = 0.075)$nn.idx
system.time(for(index in 1:nrow(DATA)) {
DATA$mean.P[index] <- mean(DATA[nn.idx[index,], P])
})
system.time({for(index in 1:nrow(DATA)) {
set(DATA, i=index, j="mean_P_2", value=mean(DATA[nn.idx[index, ], P]))
}})
, 2- , set()
, data.table, .
, data.table( data.table []). P
, , data.frames data.tables.
DATA[, row_idx:=seq(nrow(DATA))]
P_vec = DATA$P
system.time({
DATA[, nn_idx:=lapply(row_idx, function(i) nn.idx[i, ])]
DATA[, mean_P_3:=mean(P_vec[nn_idx[[1]]]), by=row_idx]
})
all.equal(DATA$mean.P, DATA$mean_P_2)
all.equal(DATA$mean.P, DATA$mean_P_3)
100- .
, 1 :
set.seed(1L)
DATA2 <- data.table(runif(1e6, 0,1),
runif(1e6, 0,1),
runif(1e6, 0,1),
runif(1e6, 10,30))
colnames(DATA2) <- c("x","y","z","P")
system.time({
nn.idx2 <- nn2(DATA2[,1:3], DATA2[,1:3], k=50,
treetype = "kd", searchtype = "radius",
radius = 0.075)$nn.idx
})
DATA2[, row_idx:=seq(nrow(DATA2))]
P_vec = DATA2$P
system.time({
DATA2[, nn_idx:=lapply(row_idx, function(i) nn.idx2[i, ])]
DATA2[, mean_P:=mean(P_vec[nn_idx[[1]]]), by=row_idx]
})
macbook pro 2011 (Sandy Bridge 2.2Ghz). 1,5 .