spChFIDs () для файлов карты уровня 1 или выше - PullRequest
1 голос
/ 28 февраля 2011

Надеюсь (один из) последний вопрос по картографическим файлам.

Почему это не работает, и как бы я сделал это правильно?

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 Ответ

2 голосов
/ 28 февраля 2011

Ответ очевиден, если прочитать справку для ?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(), и он знает, где найти нужную строкуимена.

...