希望(其中一个)关于地图文件的最后一个问题。
为什么这不起作用,我该怎么做?
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 = "_"))
答案 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()
方法正在被使用,它知道在哪里找到所需的行名。