R中的计数点

R中的计数点,r,R,假设我从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

假设我从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")

实际上,我能够计算出蓝色区域中有多少点落下,但是,我必须在一个非常慢的循环中进行计算。我希望能够做一个循环以外的计算,以加快我的计算速度

那你现在是怎么做的?发布您当前的方法可能使我们能够为您提供一些关于如何加快代码速度的提示。将我的代码更改为以下内容,您将看到您的代码并不总是有效:set.seed(44);w=rnorm(10,-2);z=rnorm(10,-4);是一个反例,现在它工作了!谢谢最后,我对你的函数所做的事情不是很了解。你认为你能详细说明一下吗?我试了一下:
apply
一个接一个地获取每个
blacks
像素坐标。对于每一个,它都会检查它是否更大(
我删除了第一个,并尝试清理它。太棒了,很抱歉问一下,但是如果我想添加x值不大于2的限制怎么办?
blacks <- cbind.data.frame(x=w, y=z)
sum(apply(blacks, 1, function(black) { 
  !any(front$y < black['y'] & front$x < black['x'])
}))