1 级或更高级别映射文件上的 spChFIDs()

发布于 2024-10-19 15:13:23 字数 415 浏览 4 评论 0原文

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

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

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 = "_"))

Hopefully (one of) the last question on map-files.

Why is this not working, and how would I do that right?

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

Thank you very much!!!

seems to work with row.names()

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

彻夜缠绵 2024-10-26 15:13:23

一旦阅读了 ?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 的类code> 是:

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

所以发生的情况是使用了 row.names() 函数的 SpatialPolygonsDataFrame 方法,并且它知道在哪里可以找到所需的行名称。

The answer is apparent once one reads the help for ?row.names() and ?rownames().

The rownames() function only knows something about matrix-like objects, and CUB is not one of those, hence it doesn't have row names that rownames() can find:

> rownames(CUB)
NULL

row.names() is different, it is an S3 generic function and that means package authors can write methods for specific types of objects such that the row names of those objects can be extracted.

Here is a list of the methods available for row.names() in my current session, with the sp package loaded:

> 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

The class of the object CUB is:

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

So what is happening is that the SpatialPolygonsDataFrame method of the row.names() function is being used and it knows where to find the required row names.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文