【发布时间】:2019-10-23 20:26:06
【问题描述】:
为糟糕的描述道歉。我确信这是一个非常容易解决的问题,但我对循环很陌生,无法弄清楚。我也不知道如何提供可重现的空间数据,所以....
我有由标记动物的一系列点组成的空间数据。我正在使用包adehabitat 创建包含可变百分比点的最小凸多边形。然后,我将每个多边形保存为一个 .shp 文件,以一个唯一的动物 ID、日期范围和百分比命名,并根据它来自哪个站点将其保存到不同的目录中。这是我经常执行的操作,所以我想尽可能地自动化它。
这是我现在使用的:
library(sp)
library(adehabitatHR)
library(rgdal)
df <- read.csv('data.csv', stringsAsFactors=FALSE)
site <- 'SiteName'
date <- '2019-06-22_2019-07-20'
id <- 'HAR04'
# The adehabitat packages requires data to be in a spatial format.
coordinates(df) <- df[, c('lon', 'lat')]
proj4string(df) = CRS("+init=epsg:4326")
# Create the polygons for each percentage point.
# The column specified just refers to the id, which adehabitat requires
mcp_est100 <- mcp(df[, 2], percent = 100)
mcp_est90 <- mcp(df[, 2], percent = 90)
mcp_est50 <- mcp(df[, 2], percent = 50)
# Save the polygons as shapefiles.
writeOGR(obj=mcp_est100,
dsn=site,
layer=paste(id, '_', date, '_100', sep=''),
driver='ESRI Shapefile', overwrite_layer=TRUE)
writeOGR(obj=mcp_est90,
dsn=site,
layer=paste(id, '_', date, '_90', sep=''),
driver='ESRI Shapefile', overwrite_layer=TRUE)
writeOGR(obj=mcp_est50,
dsn=site,
layer=paste(id, '_', date, '_50', sep=''),
driver='ESRI Shapefile', overwrite_layer=TRUE)
您可以看到代码高度重复,如果有任何变化(即,如果我想要 80% 的多边形而不是 50%),我需要在多个位置进行更改。有没有办法让我使用for 循环或某种apply 函数来简化它?提前致谢。
【问题讨论】:
标签: r