Как создать несколько буферов вокруг точек простой функции в al oop? - PullRequest
1 голос
/ 19 февраля 2020

У меня есть пример данных, представляющих 2 балла (SF). Я хочу создать буферы шириной 2, 1 и 0,5. Мой подход ниже. Есть ли способ сделать это более эффективным способом? Как я могу завершить этот процесс в al oop?

library(sf)

g = st_sfc(c(st_point(1:2),st_point(3:2)))

g.2 <- st_buffer(g,2)
g.1 <- st_buffer(g,1)
g.05 <- st_buffer(g,0.5)

plot(st_geometry(g.2))
plot(st_geometry(g.1), add=TRUE)
plot(st_geometry(g.05), add=TRUE)
plot(st_geometry(g), add=TRUE)

Ответы [ 3 ]

1 голос
/ 19 февраля 2020

Я попробовал следующее. Я создал al oop с map() в пакете purrr и создал три объекта в списке. Затем я нарисовал первый круг и добавил еще несколько кругов для l oop.

library(purrr)
library(sf)

g <- st_sfc(c(st_point(1:2),st_point(3:2)))

purrr::map(.x = c(0.5, 1, 2),
           .f = function(x){st_buffer(g, x)}) -> foo

plot(st_geometry(foo[[1]]), xlim = c(0, 4), ylim = c(0, 4))

for(i in 2:length(foo)) {plot(st_geometry(foo[[i]]), add = TRUE)}

enter image description here

0 голосов
/ 20 февраля 2020

Если вас интересует , я сделал следующее, основываясь главным образом на , опираясь на функции map*. В этом случае графики создаются с помощью и генерируют три графика в объекте gg.

library(sf)
library(tidyverse)

g <- st_sfc(c(st_point(1:2),st_point(3:2)))

buffers <- c(0.5, 1, 2)

x <- map2(buffers, g, function(buf, points){

  points %>% 
    st_buffer(., buf)

}) %>% 
  set_names(., nm = sprintf("g.%s", buffers))

gg <- map(names(x), function(y){
  z <- x[[y]]

  z %>% 
    ggplot(.) + 
    geom_sf() + 
    labs(title = y)

}) 

Создано в 2020-02-20 с помощью представьте пакет (v0.3.0)

0 голосов
/ 19 февраля 2020

Придерживаясь вашего запроса (используя al oop), смотрите здесь пример

library(sf)
g = st_sfc(c(st_point(1:2),st_point(3:2)))
#Buffers
buffers=c(2,1,0.5)
#Initialise result
result=g
#Loop
for (i in buffers){
  #Appending buffered points
  result=c(result,st_buffer(g,i))
}
#Remove initial element
result=result[-1]
plot(result, axes=TRUE)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...