我正在尝试在R
中进行一些地理空间分析,这将涉及在绘图期间为SpatialPolygonsDataFrame
添加属性以进行着色等。
对于组织,我想通过合并& amp;将这些属性添加到我的SpatialPolygonsDataFrame
。更新,但我一直收到“无效.internal.selfref
”警告&列将不会添加。
围绕questions and answers here,它似乎与SpatialPolygonsDataFrame
对象的数据存储在list
中的事实有关,但那里的答案没有帮助处理这个问题,因为他们通常处理的是用户定义的list
,而不是那些来自这里的软件包。
这是一个使用愚蠢的shapefile的简单示例,比如U.S. States(你会注意到我使用下面的500k分辨率):
library(maptools)
us.states<-readShapePoly("cb_2014_us_state_5m.shp")
setDT(us.states@data) #works fine
> class(us.states@data)
[1] "data.table" "data.frame"
us.states@data[,test:=1L]
警告讯息:在
`[.data.table`(us.states@data, , `:=`(test, 1L))
中: 通过(浅)检测并修复无效的.internal.selfref
data.table
的副本,以便:=
可以添加此新列 参考。在较早的时候,data.table
已复制R
(或使用structure()
或类似手动创建)。避免key<-
,names<-
和attr<-
当前(并且奇怪地)R
可能会复制整个内容data.table
。请改用set*
语法以避免复制:?set
,?setnames
和?setattr
。此外,在R<=v3.0.2
中,list(DT1,DT2)
复制了整个DT1
和DT2
(R
的{{1}}用于复制命名对象);请升级到list()
如果那是咬人的话。如果此消息没有帮助,请 向datatable-help报告,以便修复根本原因。
这种与我从其他相关答案中收集到的内容,但我至少期望数据更新,但唉:
R>v3.0.2
有什么方法可以继续使用舒适的> names(us.states@data)
[1] "STATEFP" "STATENS" "AFFGEOID" "GEOID" "STUSPS" "NAME"
"LSAD" "ALAND" "AWATER"
更新参考语法来处理:=
(或类似的SpatialPolygonsDataFrame
- 检索到的对象)?
目前,我正在使用复制更新,这有效,例如:
.shp