关键是使用一次mapply()
将函数应用于多个向量 - 这里:你的data.frame
. 哪个功能?一个为您中最多远离“锚点”(我们遍历所有条目)Z
的所有观察结果添加变量的变量。data.frame
radius
> set.seed(1)
> foo <- data.frame(X=runif(100),Y=runif(100),Z=runif(100))
> radius <- 0.5
> result <- mapply(function(X,Y,Z)
sum(foo$Z[(foo$X-X)^2+(foo$Y-Y)^2<=radius^2]),foo$X,foo$Y)
> head(cbind(foo,result))
X Y Z result
1 0.2655087 0.6547239 0.2675082 24.99153
2 0.3721239 0.3531973 0.2186453 30.51512
3 0.5728534 0.2702601 0.5167968 28.15519
4 0.9082078 0.9926841 0.2689506 12.10058
5 0.2016819 0.6334933 0.1811683 22.50695
6 0.8983897 0.2132081 0.5185761 19.05273
请注意,当然每个点Z
本身都计入其半径。如果你不想这样,你需要减去foo$Z
.
看?mapply
。