R中的dput()sp对象

时间:2017-01-04 14:35:50

标签: r geospatial spatial s4 sp

在R中有dput() sp对象的实用方法吗?

当我尝试执行以下操作时:

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对象发送到控制台?

1 个答案:

答案 0 :(得分:1)

尽管评论建议将sp对象保存为.rds - 文件(这可能是为自己保存的东西时最好的),但有时最好是获得文本版本的物体。实际上,当为SO / SX Q提供reproducible example时,以文本形式提供数据更为方便。此外,如问题中所述,可能存在无法访问文件系统的情况。

如果您只想分享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))")

不幸的是,因此属性信息(x@data)和CRS丢失了。因此,如果需要,可以考虑添加dput(x@data)来创建Spatial*DataFrame来添加此信息。