2017-01-04 2 views
1

dput()spオブジェクトに実用的な方法がありますか?dput()spオブジェクトをR

私は次の操作を実行しよう:

data(World, package = "tmap") 
dput(World[1:10, ], file=(tempFile <- tempfile())) 
World2 <- dget(tempFile) 

私が手:

> World2 <- dget(tempFile) 
Error in parse(file = file, keep.source = keep.source) : 
    ...\file14f4ee257b1:155:23: unexpected '<' 
154: 9L, 10L, 12L, 14L, 16L, 17L), class = "data.frame") 
155:  , polygons = list(< 
         ^

<は通常S4 object of class structure("Polygons", package = "sp")>が続いているので、dput()は明らかにこれらのネストされたS4オブジェクトを解決しません。

問題はthis oneと非常によく似ていますが、ここではproposed solutionは機能しません。

解決策として、私はファイルシステムにアクセスできないと仮定してください。

EDIT:より一般的な質問は、もちろんです:完全なspオブジェクトをコンソールに送信するにはどうすればよいですか?

+0

'dput()'/'dget()'(オブジェクトのASCIIテキスト表現を読み書きする)ではなく 'save()'/'load()'を使ってみてください。 –

+1

@ JoshO'Brienなぜ 'saveRDS'ではなく' save'ですか?後者はずっと使いやすくなっています。 –

+0

@KonradRudolph - +1。確かに、それは一般的により良い/よりきれいです(実際には 'dput()'のより類似したものです)。 –

答えて

1

spオブジェクトを.rds -file(自分で保存するときに最適な場合があります)という名前で保存することを示唆していますが、オブジェクトのテキストバージョンを取得することがより望ましい場合もあります。実際、SO/SXのQにreproducible exampleを提供すると、テキスト形式でデータを提供する方が便利です。さらに、この質問に記載されているように、ファイルシステムにアクセスできない場合があります。

あなたはちょうどあなたがrgeos::writeWKT()

library(rgeos) 
writeWKT(x) 
# [1] "POLYGON ((1441727.5096940901130438 6550163.0046194596216083, 
#     1150685.2609429201111197 6669225.7427449300885201, 
#     975398.4520359700545669 6603079.7771196700632572, 
#     866257.6087542800232768 6401334.5819626096636057, 
#     1441727.5096940901130438 6550163.0046194596216083))" 

を使用することができます座標spオブジェクトのこれは、その後のようなあなたの例に挿入することができます共有したい場合は、次のように属性情報、

残念ながら
library(rgeos) 
x <- readwkt("POLYGON ((1441727.5096940901130438 6550163.0046194596216083, 
         1150685.2609429201111197 6669225.7427449300885201, 
         975398.4520359700545669 6603079.7771196700632572, 
         866257.6087542800232768 6401334.5819626096636057, 
         1441727.5096940901130438 6550163.0046194596216083))") 

を([email protected] )とCRSは失われます。したがって、必要に応じてdput([email protected])を追加してSpatial*DataFrameを作成してこの情報を追加することを検討する必要があります。