【发布时间】:2016-03-21 18:11:01
【问题描述】:
我有一个由 (x,y) 给出的参数空间,其中 x 值来自 1:5 和 y 值来自 1:8。假设我当前的点p 位于(2,5)(它是红色的)。我的目标是尝试将所有点拉离点p(蓝色点)一单位距离内。
我想知道是否有一种有效的方法可以做到这一点。假设我的变量以以下方式存储:
xrange <- 1:5
yrange <- 1:8
grid <- expand.grid(xrange,yrange)
p <- data.frame(x=2,y=5)
我想以这种方式存储p下方的其他点:
res <- data.frame(x=c(1,1,1,2,2,3,3,3),y=c(4,6,4,5,6,4,5,6))
res <- rbind(p,res)
> res
x y
1 2 5
2 1 4
3 1 6
4 1 4
5 2 5
6 2 6
7 3 4
8 3 5
9 3 6
最终目标是拥有超过二维的参数空间。所以我最终想找到距离s 有一定欧式距离的所有点,并且类似地有一个结果数据框,每列是参数空间中的一个参数,每一行是一个点,其列坐标为(x,y,z,..,etc)。
编辑如果我想要一个圆或欧几里得距离s,我已经尝试了以下实现,这似乎有效。不过,我不确定该解决方案的效率如何。
eucdist <- function(z,p){
return(dist(rbind(z, p)))
}
# in this case s=1 since that is the <= condition
res <- do.call(rbind,lapply(1:nrow(grid),function(m) if(eucdist(as.numeric(grid[m,]),as.numeric(p[1,])) <= 1){return(grid[m,])}))
更多信息:目前,我的参数空间像上图那样离散化。最终,一些参数也将与离散参数连续混合。非常感谢!
【问题讨论】:
标签: r euclidean-distance