R: как правильно написать lapply для пересечения полигонов вместо цикла FOR?

Я пытаюсь пересечь список многоугольников poly.list с многоугольником (SPFD) b по raster::intersect(x,y)

Я хочу применить тот же процесс для группы многоугольников, поэтому я написал код цикла. Тем не менее, требуется целая вечность, чтобы вернуть свои результаты, поэтому я бродил, как применить одну из * подать заявку на семью, чтобы она работала?

вот мой цикл for:

int.list<-list()
for (i in 1:length(Poly.list.bb.from06)) {
  my.int<-intersect(poly.list[[i]], b)
  int.list[[i]]<-my.int
}

и вот моя функция lapply (так как я хочу применить intersect к списку нескольких многоугольников и получить обратно список многоугольников)

int.list<-lapply(poly.list, intersect(poly.list, b))

int.list<-lapply(poly.list, function(x) intersect(poly.list, b))

Пожалуйста, как мне правильно написать по-ляппински, чтобы сделать перекресток? Спасибо !

Вот некоторые фиктивные данные:

# stack overflow
library(rgeos)

# create polygon
p1 = readWKT("POLYGON((2 2,-2 2,-2 -2,2 -2,2 2))")
# create two buffers - one wth {raster}, one with {rgeos},
# both covers also original polygon !
p2<-readWKT("POLYGON((1.5 1.5,-1.5 1.5,-1.5 -1.5,1.5 -1.5,1.5 1.5))")

poly.list<-list(p1, p2)

b = readWKT("POLYGON((1 1,-1 1,-1 -1,1 -1,1 1))")

person maycca    schedule 27.05.2016    source источник
comment
int.list<-lapply(poly.list, function(x) intersect(x, b)) но я не верю, что это будет быстрее   -  person HubertL    schedule 28.05.2016
comment
Предоставьте образцы poly.list и b для воспроизведения   -  person HubertL    schedule 28.05.2016
comment
@HubertL, я думаю, это не сработает ... :(   -  person maycca    schedule 28.05.2016
comment
с ошибкой Error in as.vector(y) : no method for coercing this S4 class to a vector   -  person maycca    schedule 28.05.2016


Ответы (2)


gIntersects() - это функция, которую вы ищете:

sapply(poly.list, function(x) gIntersects(x, b))
[1] TRUE TRUE
person HubertL    schedule 27.05.2016
comment
Я думаю, что нет ... Я знаю, что мои многоугольники пересекаются, но я хочу выделить область, которая фактически пересекается (общая для обоих). Запустив это, я возвращаю логические значения, но не получаю список пересеченных многоугольников ... - person maycca; 28.05.2016
comment
Если вам нужен перекресток, используйте gIntersections() - person HubertL; 28.05.2016

Основываясь на ответе @HubertL, это тот, который я ищу ...

int.list2<-lapply(poly.list, function(x) intersect(x, b))

весь код:

# stack overflow
library(rgeos)

# create polygon
p1 = readWKT("POLYGON((2 2,-2 2,-2 -2,2 -2,2 2))")
# create two buffers - one wth {raster}, one with {rgeos},
# both covers also original polygon !
p2<-readWKT("POLYGON((1.5 1.5,-1.5 1.5,-1.5 -1.5,1.5 -1.5,1.5 1.5))")

poly.list<-list(p1, p2)

b = readWKT("POLYGON((1 1,-1 1,-1 -1,1 -1,1 1))")

# intersect list of polygons with a polygon,
# get back list of polygons
int.list2<-lapply(poly.list, function(x) intersect(x, b))
person maycca    schedule 27.05.2016