假设我从40(x,y)对创建以下图片。
现在给出额外的分数,黑色,我希望能够计算蓝色区域内有多少分落在外面(有多少分落在外面)(以非常有效的方式,因为我会在里面做很多次昂贵的循环)。为了说明我在寻找什么,请考虑下一个数字:
从上图中可以看出,我希望能够说蓝色区域外有3个黑点,蓝色区域内有7个黑点。
以下是我为完成上述数据而编写的代码。
#x,y data
x = rnorm(40)
y = rnorm(40)
#Calculates the green points
d = data.frame(x,y)
D = d[order(d$x,d$y,decreasing=FALSE),]
front = D[which(!duplicated(cummin(D$y))),]
plot(x,y,pch=21,bg="red",xlim=c(-5,5),ylim=c(-5,5))
points(front$x,front$y,pch=21,bg="green")
rect(front$x,front$y,max(x)+100000,max(y)+100000,col="lightblue",border=NA)
points(x,y,bg="red",pch=21)
points(front$x,front$y,bg="green",pch=21)
#Additional 10 black points
w = rnorm(10,3)
z = rnorm(10,-1)
points(w,z,pch=19,col="black")
我实际上能够计算出蓝色区域中有多少点,但是,我必须在一个非常慢的循环内进行此计算。我希望能够在循环之外进行计算以加速我的计算。
答案 0 :(得分:1)
blacks <- cbind.data.frame(x=w, y=z)
sum(apply(blacks, 1, function(black) {
!any(front$y < black['y'] & front$x < black['x'])
}))