【发布时间】:2022-06-20 01:31:31
【问题描述】:
我正在尝试计算整个物种的家庭范围,并根据性别将两组分开。我使用了 mcp() 并且它运行但输出有问题。
这是我的数据
library(raster)
library(dismo)
library(rgdal)
library(dplyr)
library(tidyverse)
library(tidyselect)
library(sp)
library(adehabitatHR)
library(scales)
cat.shark.data <- read.csv2("C:/Users/jcdeb/OneDrive/Bureaublad/SASC/hopefully last file ever.csv", header=T)
head(cat.shark.data)
Common.name Sex..M.F. Long Lat
1 Pyjama Catshark F 19.34785 -34.75671
2 Pyjama Catshark F 19.29512 -34.61850
3 Pyjama Catshark M 19.29512 -34.61850
4 Pyjama Catshark M 19.29512 -34.61850
5 Pyjama Catshark M 19.29512 -34.61850
6 Pyjama Catshark F 19.34581 -34.55419
# converting Lat long spatialpoints to UTM zone 34 spatialPoints
cord.dec = SpatialPoints(cbind(cat.shark.data$Long, cat.shark.data$Lat), proj4string=CRS("+proj=longlat"))
cord.dec
cord.dec@coords
zone <- 34
# used example from
# https://stackoverflow.com/questions/38621660/unexpected-convertion-output-from-latlong-to-utm-in-r
cord.UTM <- spTransform(cord.dec, CRS(paste("+proj=utm +south +zone=",zone,"ellps=WGS84",sep='')))
cord.UTM
par(mfrow = c(1, 2))
plot(cord.dec, axes = TRUE, main = "Lat-Long Coordinates", cex.axis = 0.95)
plot(cord.UTM, axes = TRUE, main = "UTM Coordinates", col = "red", cex.axis = 0.95)
# replace column with Lat and Long for UTM coordinates
cord.dec.coords <- as.data.frame(cord.UTM@coords)
cat.shark.data$Lat <-cord.dec.coords$coords.x1
cat.shark.data$Long <- cord.dec.coords$coords.x2
plot(cat.shark.data$Long, cat.shark.data$Lat)
这部分应该没问题,因为我检查了 longlat 到 UTM 的转换,并且坐标确实与正确的 UTM 值相对应。因此,我认为问题在于下一部分:
par(mfrow = c(1, 1))
x<- cat.shark.data[,"Long"]
y<- cat.shark.data[,"Lat"]
plot(x,y)
shark.sp<- cat.shark.data[,c("Sex..M.F.", "Long", "Lat")]
coordinates(shark.sp)<- c("Long", "Lat")
class(shark.sp)
slot(shark.sp, "proj4string") <- CRS( "+proj=utm +zone=34 +datum=WGS84 +units=m +no_defs" )
#proj4string(shark.sp) <- CRS( "+proj=utm +zone=34H +datum=WGS84 +units=m +no_defs" ) # should be the same right ?
shark.MCP<- mcp(shark.sp, percent = 95, unout = c( "km2"))
shark.MCP
Object of class "SpatialPolygonsDataFrame" (package sp):
Number of SpatialPolygons: 2
Variables measured:
id area
F F 49.26988
M M 49.26988
plot(shark.sp, col = as.factor(shark.sp@data$Sex..M.F.), pch = 16)
plot(shark.MCP, col = alpha(1:5, 0.5), add = TRUE)
hrs <- mcp.area(shark.sp, percent = seq(50, 100, by = 5))
hrs
F M
50 50.91919 50.91919
55 50.91919 50.91919
60 50.91919 50.91919
65 50.91919 50.91919
70 50.91919 50.91919
75 233.67845 57.53127
80 299.54642 87.06809
85 301.38459 127.67519
90 633.39131 606.42969
95 4926.98764 4926.98764
100 34146.77787 20543.01517
当我绘制数据点时,它们看起来具有真实的间距,并且对于该物种而言,如果 95% 的家园范围在 50 平方公里左右,这并不是不可能的。然而,女性和男性不太可能有完全相同的家庭范围,当我查看小时结果时,它们根本不会加起来。不幸的是,这是我第一次尝试,所以我不知道问题出在哪里。
在 mcp() 代码行之后我也收到此警告:
In proj4string(xy) :
CRS object has comment, which is lost in output; in tests, see
https://cran.r-project.org/web/packages/sp/vignettes/CRS_warnings.html
当我运行 hrs() 代码时出现 11 个警告。 但是,我将此站点作为参考,并使用他们的数据尝试了他们的脚本: https://jamesepaterson.github.io/jamespatersonblog/03_trackingworkshop_homeranges 并得到了相同的警告,同时仍然得到与示例相同的结果。
我查看了警告,甚至调整了一些代码来解决它,但我仍然得到警告和相同的结果。
编辑:在玩了更多代码之后,如果我运行此代码行,我只会收到警告
slot(shark.sp, "proj4string") <- CRS( "+proj=utm +zone=34 +datum=WGS84 +units=m +no_defs" )
有人知道我哪里出错了,因为我尝试了很多,但似乎没有任何效果。
提前谢谢你!
【问题讨论】:
标签: r spatial projection adehabitathr