在is.character(i):';中使用Adehilitathr错误获取最小凸多边形时遇到问题;i';不见了
我正在尝试使用17只动物的位置数据创建最小凸多边形。我创建了一个包含两个组件的列表,一个组件是每个动物的id号(我计算了id号),另一个组件是xy位置,类“空间点”。据我所知,数据的格式与Adehilitathr文档的详细信息相同,但当我去计算MCP时,我得到一个错误消息:在is.character(i):';中使用Adehilitathr错误获取最小凸多边形时遇到问题;i';不见了,r,R,我正在尝试使用17只动物的位置数据创建最小凸多边形。我创建了一个包含两个组件的列表,一个组件是每个动物的id号(我计算了id号),另一个组件是xy位置,类“空间点”。据我所知,数据的格式与Adehilitathr文档的详细信息相同,但当我去计算MCP时,我得到一个错误消息: Error in is.character(i) : 'i' is missing In addition: Warning message: In rel[, 1] : j index ignore
Error in is.character(i) : 'i' is missing
In addition: Warning message:
In rel[, 1] : j index ignored
以下是我目前掌握的代码:
sdata@data = data.frame(sdata@data, v[match(rownames(sdata@data), rownames(v)),])
sdata2 = sdata[(sdata$'usvsa' == '1'),(1:9)]
sdata2$lynx<-as.factor(sdata2$lynx) #"lynx" is the name of the id# column
sdata2=sdata2[-(1:8)]
sdata2<-as.data.frame(sdata2)
location=sdata2[-(3)]
location<-SpatialPoints(location)
id=sdata2[-(1:2)]
lynxdata<- list(name= id, relocs=location)
rel<- lynxdata$relocs
cp <- mcp(rel[,1], percent=95)
任何关于我的数据组织可能有什么问题的想法都将不胜感激!谢谢
这里,当我将其转换为数据帧时会发生什么
lynxdata2<-as.data.frame(lynxdata)
> head(lynxdata2)
lynx relocs.x relocs.y
1 306 605738.8 1644068
2 306 605504.2 1644478
3 306 605503.0 1644456
4 306 605352.8 1647556
5 306 605437.8 1648239
6 306 605353.8 1648314
> cp <- mcp(lynxdata2[,1], percent=95)
Error in mcp(lynxdata2[, 1], percent = 95) :
xy should be of class SpatialPoints
lynxdata2头(lynxdata2)
lynx relocs.x relocs.y
1 306 605738.8 1644068
2 306 605504.2 1644478
3 306 605503.0 1644456
4 306 605352.8 1647556
5 306 605437.8 1648239
6 306 605353.8 1648314
>cp我假设您试图从rel
中提取x
值?出于某种奇怪的原因,SpatialPoints类只允许按行而不是按列进行子集设置。这就是为什么我们会犯这样的错误。提取数据的一种方法是将其转换为data.frame,然后提取列。因此,您可以将最后一行替换为
cp <- mcp(as.data.frame(rel)[,1], percent=95)
cpclass(rel)
返回什么?看起来它不喜欢你索引那个变量的方式。嗨,类(rel)告诉我rel是一个分类为“空间点”的变量。我在上面的问题中添加了一些代码。我的错误是,我想同时提取x和y,第一列应该是动物ID号。因此,我修复了我的数据集,使其不再是一个包含系数id#和满足点xy位置的列表。现在它是一个数据帧,所以第一列是id#,第二列是x,第三列是Y。但是,当我尝试mcp函数时,我得到一个新的错误,说xy必须是类空间点。我编辑了上面的代码来说明。@user3088823好吧,我不知道mcp
函数应该做什么,但是从您的错误消息来看,它确实需要一类SpatialPoints
而不是data.frame。那么只需cp Hi,那么mcp函数应该获取这个位置列表,通过动物id将它们分开(第1列),然后围绕每个动物的位置绘制一个最小凸多边形。这是一种估算每种动物的活动范围边界的方法。我试着使用cp@user3088823如果class(rel)=“SpatialPoints”
并且它说不是,那么一定是出了问题。很抱歉我已经对目前可能出现的问题绞尽脑汁了。
cp <- mcp(as.data.frame(rel)[,1], percent=95)