2017-01-04 10 views
1

Есть ли практический способ для dput() a 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 здесь не работает.

Для решения предположим, что у меня нет доступа к файловой системе.

EDIT: более общий вопрос, конечно: Как я могу отправить полный объект sp на консоль?

+0

Попробуйте использовать 'save()'/'load()' вместо 'dput()'/'dget()' (который записывает и читает текстовые представления объекта ASCII). –

+1

@ JoshO'Brien Почему 'save' вместо' saveRDS'? Я считаю, что последнее гораздо проще в использовании. –

+0

@ KonradRudolph - +1. Правда, это вообще лучше/чище (и на самом деле является более близким аналогом к 'dput()'.) –

ответ

1

Несмотря на комментарии предлагает сохранить sp Объект как .rds -файл (который, вероятно, является лучшим при сохранении вещей для себя), иногда предпочтительнее получить текстовую версию объекта. Фактически, при предоставлении reproducible example для SO/SX Qs более удобно предоставлять данные в текстовой форме. Более того, как указано в вопросе, могут быть случаи, когда вы не можете получить доступ к файловой системе.

Если вы просто хотите поделиться 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))" 

Это может быть вставлен в пример, как:

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.

Смежные вопросы