2017-01-04 10 views
1

dput()sp의 R 개체에 대한 실질적인 방법이 있습니까? 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이 작동하지 않습니다.

해결 방법은 파일 시스템에 대한 액세스 권한이 없다고 가정하십시오.

편집 : 더 일반적인 질문은 물론입니다. 콘솔에 완전한 sp 개체를 보내려면 어떻게해야합니까? 의견에도 불구하고

+0

'dput()'/'dget()'(객체의 ASCII 텍스트 표현을 쓰고 읽음)보다는'save()'/'load()'를 사용해보십시오. –

+1

@ JoshO'Brien 왜'saveRDS' 대신에'save'입니까? 후자는 사용하기가 훨씬 쉽습니다. –

+0

@KonradRudolph - +1. 사실, 일반적으로 더 깔끔하고 더 깨끗합니다. (사실'dput()'에 가깝습니다.) –

답변

1

는 때때로 개체의 텍스트 버전을하는 것이 더 바람직하다, (자신을위한 일을 저장할 때 최선 아마도) .rds - 파일로 sp 객체를 저장할 제안합니다. 실제로 SO/SX Q에 reproducible example을 제공하면 텍스트 형식으로 데이터를 제공하는 것이 더 편리합니다. 또한 질문에서 언급 한 것처럼 파일 시스템에 액세스 할 수없는 경우가있을 수 있습니다. (불행하게도

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]를 : 당신은 그냥 공유하려는 경우

의이 조정하는 sp 객체는이 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))" 

이 다음과 같은 귀하의 예제에 삽입 할 수 있습니다 사용할 수 있습니다) 및 CRS가 손실됩니다. 따라서 필요에 따라 dput([email protected])을 추가하여 Spatial*DataFrame을 생성하여이 정보를 추가하는 것을 고려해야합니다.