在is.character(i)中使用adehabitatHR-Error获取最小凸多边形时遇到问题:' i'不见了

时间:2014-06-19 15:07:35

标签: r

我正在尝试使用来自17只动物的位置数据创建最小凸多边形。我创建了一个包含两个组件的列表,一个组件是每个动物的id号(我考虑了id号),另一个组件是xy位置,类“SpatialPoints”。据我所知,数据的格式与adehabitatHR文档的详细信息一样,但当我去计算MCP时,我得到一个错误信息:

    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)

以下是lynxdata列表的摘要:

    > summary(lynxdata)
          Length Class         Mode
   name       1  data.frame    list
   relocs 20623  SpatialPoints S4  

   > class (rel)
   [1] "SpatialPoints"
   attr(,"package")
   [1] "sp"

关于组织我的数据可能出错的任何想法都将非常感谢!谢谢!

当我将其转换为数据框时会发生什么

     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

1 个答案:

答案 0 :(得分:0)

我假设您尝试从x中提取rel值?由于某些奇怪的原因,SpatialPoints类仅允许按行而不是列进行子集化。这就是为什么会遇到这个特殊的错误。提取数据的一种方法是将其转换为data.frame,然后提取列。所以你可以用

替换你的最后一行
cp <- mcp(as.data.frame(rel)[,1], percent=95)