【发布时间】:2018-10-12 00:00:38
【问题描述】:
我正在尝试将地图包中的状态地图加载到 R 对象中。我希望它是一个 SpatialPolygonsDataFrame 或者我可以在检查后变成一个。然而,我在第一步失败了——把它变成一个 R 对象。我不知道文件类型。
我首先尝试将 map() 输出直接分配给 R 对象:
st_m <- maps::map(database = "state")
绘制地图,但str(st_m) 似乎什么都不做,除非它正在重新绘制同一张地图。
然后我尝试将其加载为数据集:st_m <- data("stateMapEnv", package="maps"),但这只是返回一个字符串:
> str(stateMapEnv)
chr "R_MAP_DATA_DIR"
我打开地图目录win-library/3.4/maps/mapdata/,发现我认为是地图文件“state.L”。
我尝试使用扫描阅读它并收到一条我不明白的错误消息:
scan(file = "D:/Documents/R/win-library/3.4/maps/mapdata/state.L")
Error in scan(file = "D:/Documents/R/win-library/3.4/maps/mapdata/state.L") :
scan() expected 'a real', got '#'
然后我用 Notepad++ 打开了这个文件。它似乎是一个二进制或压缩文件。
所以我认为它可能是一个带有不寻常扩展名的 R 数据文件。但是我尝试加载它返回了一个“bad magic number”错误:
st_m <- load("D:/Documents/R/win-library/3.4/maps/mapdata/state.L")
Error in load("D:/Documents/R/win-library/3.4/maps/mapdata/state.L") :
bad restore file magic number (file may be corrupted) -- no data loaded
观察到这些响应已经从无用到难以理解再到神秘,我认为最好向 stackoverflow 的向导寻求帮助。
【问题讨论】:
-
不明白你所说的
str(st_m)什么意思。它似乎只是一个 x、y 坐标和状态名称的列表 -
andrewH,您希望
str函数做什么?我希望它能够输出对象的structure 的摘要,但不会在其演示文稿中执行任何操作。相反,一些类会覆盖它们的print.classtype函数来做一些特别的事情;例如p <- ggplot(...)非常快,而且只做赋值;print.ggplot函数实际上是 plots 它,这是它的“打印副作用”,但str(p)并没有这样做,它只是破坏了结构。 (不过,也可以写ggplot2::str.ggplot,玩得开心……) -
查看文档 (
?maps::map) 以了解maps::map("state")返回类型为map的对象并可选择绘制形状。然后,您希望将该对象转换为Spatial*对象