R使用tmap包创建地理文件时select函数报错GEOID不存在求助
问题排查结果
报错原因
报错核心是管道操作符%>%的传递逻辑断裂:你在filter(variable == "B27001_001")代码行末尾添加注释后,没有继续跟上管道符%>%,导致后续的select(GEOID, NAME)被识别为独立运行的代码,没有接收前面过滤后的dat16数据集作为输入,函数会默认在全局环境中查找GEOID这个独立对象,因此触发“对象未找到”的报错。
修正后的代码
保留原注释位置的修正写法:
shp <- dat16 %>% filter(variable == "B27001_001") %>% # much faster than using distinct() select(GEOID, NAME) %>% left_join(dat, by = c("GEOID", "NAME")) %>% arrange(GEOID) %>% rename( uninsured_2012 = `2012`, uninsured_2016 = `2016`, uninsured_diff = diff )
也可以调整注释位置避免逻辑歧义:
# 比使用distinct()处理效率更高 shp <- dat16 %>% filter(variable == "B27001_001") %>% select(GEOID, NAME) %>% left_join(dat, by = c("GEOID", "NAME")) %>% arrange(GEOID) %>% rename( uninsured_2012 = `2012`, uninsured_2016 = `2016`, uninsured_diff = diff )
补充说明
dplyr管道符%>%的作用是将左侧表达式的运算结果,作为第一个参数传入右侧的函数,必须保证链式调用的每一行(除了最后一行)末尾都跟上%>%,才不会中断数据传递逻辑。
内容的提问来源于stack exchange,提问作者rfl026
相关产品推荐
相关产品推荐

