spChFIDs()在1级或更高级别的地图文件上

时间:2011-02-28 18:56:09

标签: r graphics maps

希望(其中一个)关于地图文件的最后一个问题。

为什么这不起作用,我该怎么做?

load(url('http://gadm.org/data/rda/CUB_adm1.RData'))
CUB <- gadm
CUB <- spChFIDs(CUB, paste("CUB", rownames(CUB), sep = "_"))

非常感谢!!!

似乎与row.names()

一起使用
load(url('http://gadm.org/data/rda/CUB_adm1.RData'))
CUB <- gadm
CUB <- spChFIDs(CUB, paste("CUB", row.names(CUB), sep = "_"))

1 个答案:

答案 0 :(得分:2)

一旦阅读了?row.names()?rownames()的帮助,答案就很明显了。

rownames()函数只知道类似矩阵的对象,而CUB不是其中之一,因此它没有rownames()可以找到的行名:

> rownames(CUB)
NULL

row.names()不同,它是一个S3泛型函数,这意味着包作者可以为特定类型的对象编写方法,以便可以提取这些对象的行名。

以下是我当前会话中row.names()可用方法的列表,其中加载了sp包:

> methods(row.names)
 [1] row.names.data.frame               
 [2] row.names.default                  
 [3] row.names.SpatialGrid*             
 [4] row.names.SpatialGridDataFrame*    
 [5] row.names.SpatialLines*            
 [6] row.names.SpatialLinesDataFrame*   
 [7] row.names.SpatialPixels*           
 [8] row.names.SpatialPoints*           
 [9] row.names.SpatialPointsDataFrame*  
[10] row.names.SpatialPolygons*         
[11] row.names.SpatialPolygonsDataFrame*

   Non-visible functions are asterisked

对象CUB的类是:

> class(CUB)
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"

所以正在发生的是SpatialPolygonsDataFrame函数的row.names()方法正在被使用,它知道在哪里找到所需的行名。