プロット中に色付けなどのためにR
属性を s に追加することを含む、いくつかの地理空間分析を実行しようとしています。SpatialPolygonsDataFrame
整理のために、マージと更新によってこれらの属性を自分の に追加したいのですSpatialPolygonsDataFrame
が、「無効.internal.selfref
」という警告が表示され続け、列が追加されません。
ここでの質問と回答をいじってみると、SpatialPolygonsDataFrame
オブジェクトのデータが に格納されていることに関連しているようですが、一般的にユーザー定義のlist
を扱っていたため、これに対処する方法については回答がありませんでしたlist
ここのようなパッケージから出てくるものの代わりに。
これは、ばかげたシェープファイルを使用した簡単な例です。たとえば、米国の州です(以下の 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]
警告メッセージ: In
`[.data.table`(us.states@data, , `:=`(test, 1L))
: Invalid.internal.selfref
detected and fix by a (shallow) copy of であるdata.table
ため、:=
参照によってこの新しい列を追加できます。以前の時点で、これdata.table
はによってコピーされました(または、または類似のR
方法を使用して手動で作成されました)。をstructure()
避けkey<-
、 現在(names<-
そして奇妙なことに)全体をコピーする可能性があります 。コピーを避けるために、代わりに構文を使用してください: 、 および. また、 では、 and (は名前付きオブジェクトのコピーに使用されます)全体をコピーしました。にアップグレードしてくださいattr<-
R
data.table
set*
?set
?setnames
?setattr
R<=v3.0.2
list(DT1,DT2)
DT1
DT2
R
list()
R>v3.0.2
それが噛む場合。このメッセージが解決しない場合は、根本原因を修正できるように datatable-help に報告してください。
この種のジャイブは、他の関連する回答から収集したものですが、少なくともデータが更新されることを期待していましたが、残念ながら:
> names(us.states@data)
[1] "STATEFP" "STATENS" "AFFGEOID" "GEOID" "STUSPS" "NAME"
"LSAD" "ALAND" "AWATER"
(または同様の取得されたオブジェクト)を操作:=
するために参照構文による快適な更新を引き続き使用できる方法はありますか?SpatialPolygonsDataFrame
.shp
今のところ、コピーによる更新を使用しています。これは機能します。
us.states@data<-copy(us.states@data)[,test:=1L]
> names(us.states@data)
[1] "STATEFP" "STATENS" "AFFGEOID" "GEOID" "STUSPS" "NAME" "LSAD"
[8] "ALAND" "AWATER" "test"