プロット中に色付けなどのために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.selfrefdetected and fix by a (shallow) copy of であるdata.tableため、:=参照によってこの新しい列を追加できます。以前の時点で、これdata.tableはによってコピーされました(または、または類似のR方法を使用して手動で作成されました)。をstructure()避けkey<-、 現在(names<-そして奇妙なことに)全体をコピーする可能性があります 。コピーを避けるために、代わりに構文を使用してください: 、 および. また、 では、 and (は名前付きオブジェクトのコピーに使用されます)全体をコピーしました。にアップグレードしてくださいattr<-Rdata.tableset*?set?setnames?setattrR<=v3.0.2list(DT1,DT2)DT1DT2Rlist()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"