У меня есть пространство параметров, заданное (x, y) с x
значениями от 1:5
и y
значениями от 1:8
. Скажем, мой текущий пункт p
находится по адресу (2,5)
(он окрашен в красный цвет). Моя цель - попытаться вытащить все точки в пределах одного расстояния от точки p
(точки в синем). Как набрать точки, находящиеся на определенном расстоянии от R?
Мне было интересно, был ли эффективный способ сделать это. Скажем, мои переменные хранятся следующим образом:
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
Конечная цель состоит в том, чтобы иметь пространство параметров, которое более 2-х мерных. Поэтому в конечном итоге мне бы хотелось найти все точки, которые имеют некоторое эвклидовое расстояние s
, и аналогичным образом получить результирующий фреймворк с каждым столбцом, являющимся параметром в пространстве параметров, и каждая строка является точкой с координатами (x,y,z,..,etc)
из ее столбцов.
EDIT Я попытался выполнить следующую реализацию, если мне нужен круг или эвклидовое расстояние 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,])}))
Дополнительная информация: на данный момент мое пространство параметров дискретизировано, как показано на рисунке выше. В конечном итоге некоторые параметры будут непрерывно смешиваться с дискретными параметрами. Спасибо огромное!
ahhh я вижу. способ 'mapply' работает так, что ваша функция' (x-y)^2' просто займет расстояние между 'grid' и' p', независимо от количества измерений? –
@road_to_quantdom он циклически перебирает столбцы, вычисляя результирующий вектор для каждого. – josliber