मेरे पास 2 अंक (एसएफ) का प्रतिनिधित्व करने वाला नमूना डेटा है। मैं चौड़ाई 2, 1 और 0.5 के साथ बफर बनाना चाहता हूं। मेरा दृष्टिकोण नीचे है। क्या इसे और अधिक कुशल तरीके से करने का कोई तरीका है? मैं इस प्रक्रिया को लूप में कैसे लपेट सकता हूं?

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)
2
ilex 19 फरवरी 2020, 14:55

2 जवाब

मैंने निम्नलिखित की कोशिश की। मैंने purrr पैकेज में map() के साथ एक लूप बनाया और एक सूची में तीन ऑब्जेक्ट बनाए। फिर, मैंने पहला सर्कल बनाया और लूप के लिए और सर्कल जोड़े।

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

1
jazzurro 19 फरवरी 2020, 16:14

आपके अनुरोध पर टिके रहना (लूप का उपयोग करके) यहां एक उदाहरण देखें

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

0
dieghernan 19 फरवरी 2020, 19:36