以前工作的 ggplot2 脚本现在在 fortify 返回致命错误
Previously working ggplot2 script now returning fatal error at fortify
我之前写过一个脚本来创建美国的彩色地图,每个州都根据一些模拟数据着色。这个想法是以后能够用一些措施代替模拟数据。它被编写为自包含的,最初 运行 很好,但现在当 fortify {ggplot2}
命令为 运行 时崩溃。
我认为这是由于 fortify
命令的问题造成的,因为它 returns 是一个致命错误并会在此时重新启动 R。这是致命错误之前的代码:
###Load libraries
library(maptools)
library(ggplot2)
library(ggmap)
library(rgdal)
library(dplyr)
#Set working directory to where you want your files to exist (or where they already exist)
#Download, read and translate coord data for shape file of US States
if(!file.exists('tl_2014_us_state.shp')){
download.file('ftp://ftp2.census.gov/geo/tiger/TIGER2014/STATE/tl_2014_us_state.zip',
'tl_2014_us_state.zip')
files <- unzip('tl_2014_us_state.zip')
tract <- readOGR(".","tl_2014_us_state") %>% spTransform(CRS("+proj=longlat +datum=WGS84"))
} else {
tract <- readShapeSpatial("./tl_2014_us_state.shp") #%>% spTransform(CRS("+proj=longlat +datum=WGS84"))
}
# shape<-readShapeSpatial("./fao/World_Fao_Zones.shp")
#Download reference data for state names and abbreviations - a matter of convenience if there are
#states for which you have no data
if(!file.exists('states.csv')){
download.file('http://www.fonz.net/blog/wp-content/uploads/2008/04/states.csv',
'states.csv')
states <- read.csv('states.csv')
} else {
states <- read.csv('states.csv')
}
#simulated data for plotting values of some 'characteristic'
mydata <- data.frame(rnorm(51, 0, 1)) #51 "states" in the state dataset
names(mydata)[1] <- 'value' #give the simulated column of data a name
#Turn geo data into R dataframe
tract_geom<-fortify(tract,region="STUSPS") #STUSPS is the state abbreviation which will act as a key for merge
脚本在上面的行停止工作并导致 R 崩溃并出现致命错误。我尝试了 another post 中描述的变通方法,其中您在空间数据框中放置一个显式 "id" 列,然后 fortify
默认将其用作键。通过此修改,行:
tract@data$id <- tract@data$STUSPS
tract_geom <- fortify(tract)
将替换前面代码中的 tract_geom<-fortify(tract,region="STUSPS")
,
其中 STUSPS 是以后数据合并的关键。
不幸的是,当我随后强化区域数据时,id 列不是预期的州缩写,而是一个介于“0”和“55”(56 个唯一值)之间的字符向量。州的缩写(共有 56 个)似乎以某种方式被 t运行 转换为数字,然后转换为字符。
我正在努力找出发生这种情况的原因并寻找修复方法。如果 fortify 函数与 region
参数一起使用,那将是理想的,但如果我能让解决方法起作用,那也太好了。任何帮助将不胜感激。我查看了各种类似问题的文档和解决方案,结果很短(甚至尝试过 ArcGIS)。
尝试:
readOGR(..., stringsAsFactors=FALSE, ...)
我能够通过 运行 update.packages()
解决我自己的问题。我不完全确定哪个包是罪魁祸首,但它可能是 maptools
、rgdal
或 sp
,因为这些包属于要更新的包,可能影响了问题。
最后,更新后,脚本以原始形式运行,tract_geom<-fortify(tract,region="STUSPS")
行完好无损。感谢那些帮助我解决这个问题的人。
我之前写过一个脚本来创建美国的彩色地图,每个州都根据一些模拟数据着色。这个想法是以后能够用一些措施代替模拟数据。它被编写为自包含的,最初 运行 很好,但现在当 fortify {ggplot2}
命令为 运行 时崩溃。
我认为这是由于 fortify
命令的问题造成的,因为它 returns 是一个致命错误并会在此时重新启动 R。这是致命错误之前的代码:
###Load libraries
library(maptools)
library(ggplot2)
library(ggmap)
library(rgdal)
library(dplyr)
#Set working directory to where you want your files to exist (or where they already exist)
#Download, read and translate coord data for shape file of US States
if(!file.exists('tl_2014_us_state.shp')){
download.file('ftp://ftp2.census.gov/geo/tiger/TIGER2014/STATE/tl_2014_us_state.zip',
'tl_2014_us_state.zip')
files <- unzip('tl_2014_us_state.zip')
tract <- readOGR(".","tl_2014_us_state") %>% spTransform(CRS("+proj=longlat +datum=WGS84"))
} else {
tract <- readShapeSpatial("./tl_2014_us_state.shp") #%>% spTransform(CRS("+proj=longlat +datum=WGS84"))
}
# shape<-readShapeSpatial("./fao/World_Fao_Zones.shp")
#Download reference data for state names and abbreviations - a matter of convenience if there are
#states for which you have no data
if(!file.exists('states.csv')){
download.file('http://www.fonz.net/blog/wp-content/uploads/2008/04/states.csv',
'states.csv')
states <- read.csv('states.csv')
} else {
states <- read.csv('states.csv')
}
#simulated data for plotting values of some 'characteristic'
mydata <- data.frame(rnorm(51, 0, 1)) #51 "states" in the state dataset
names(mydata)[1] <- 'value' #give the simulated column of data a name
#Turn geo data into R dataframe
tract_geom<-fortify(tract,region="STUSPS") #STUSPS is the state abbreviation which will act as a key for merge
脚本在上面的行停止工作并导致 R 崩溃并出现致命错误。我尝试了 another post 中描述的变通方法,其中您在空间数据框中放置一个显式 "id" 列,然后 fortify
默认将其用作键。通过此修改,行:
tract@data$id <- tract@data$STUSPS
tract_geom <- fortify(tract)
将替换前面代码中的 tract_geom<-fortify(tract,region="STUSPS")
,
其中 STUSPS 是以后数据合并的关键。
不幸的是,当我随后强化区域数据时,id 列不是预期的州缩写,而是一个介于“0”和“55”(56 个唯一值)之间的字符向量。州的缩写(共有 56 个)似乎以某种方式被 t运行 转换为数字,然后转换为字符。
我正在努力找出发生这种情况的原因并寻找修复方法。如果 fortify 函数与 region
参数一起使用,那将是理想的,但如果我能让解决方法起作用,那也太好了。任何帮助将不胜感激。我查看了各种类似问题的文档和解决方案,结果很短(甚至尝试过 ArcGIS)。
尝试:
readOGR(..., stringsAsFactors=FALSE, ...)
我能够通过 运行 update.packages()
解决我自己的问题。我不完全确定哪个包是罪魁祸首,但它可能是 maptools
、rgdal
或 sp
,因为这些包属于要更新的包,可能影响了问题。
最后,更新后,脚本以原始形式运行,tract_geom<-fortify(tract,region="STUSPS")
行完好无损。感谢那些帮助我解决这个问题的人。