提问人:Eponymous 提问时间:6/26/2023 最后编辑:Eponymous 更新时间:7/13/2023 访问量:138
state_choropleth不适用于 >1 状态
state_choropleth not working for >1 state
问:
尝试一个非常基本的状态分区统计:
library(choroplethr)
library(choroplethrMaps)
state_choropleth(df_pop_state)
它退出并显示以下错误:
Error in private$zoom == "alaska" || private$zoom == "hawaii" :
'length = 51' in coercion to 'logical(1)'
这与这里找到的地图相同,尽管在这种情况下,地图似乎被制作出来了。
如果我缩放到一个状态,它可以正常工作:
state_choropleth(df_pop_state, zoom=c("washington"))
不知道发生了什么。我很确定一切都是最新的。几个月前,我确实进行了 R 升级(也许从版本 3 升级到 4?),所以也许这是相关的。
TIA。
结果sessionInfo()
R version 4.3.1 (2023-06-16)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Monterey 12.4
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.11.0
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
time zone: Europe/Rome
tzcode source: internal
attached base packages:
[1] datasets utils stats graphics grDevices methods base
other attached packages:
[1] dplyr_1.1.2 zoo_1.8-12 viridis_0.6.3 viridisLite_0.4.2
[5] scales_1.2.1 readr_2.1.4 RColorBrewer_1.1-3 plyr_1.8.8
[9] plotrix_3.8-2 PBSmapping_2.73.2 maptools_1.1-7 sp_2.0-0
[13] lubridate_1.9.2 jsonlite_1.8.5 ggmap_3.0.2 ggplot2_3.4.2
[17] devtools_2.4.5 usethis_2.2.1 deldir_1.0-9 clipr_0.8.0
[21] choroplethrZip_1.5.0 choroplethrMaps_1.0.1 choroplethr_3.7.1 acs_2.1.4
[25] XML_3.99-0.14 stringr_1.5.0 car_3.1-2 carData_3.0-5
[29] calibrate_1.7.7 MASS_7.3-60 alphahull_2.5 datapasta_3.1.1
loaded via a namespace (and not attached):
[1] rstudioapi_0.14 magrittr_2.0.3 spatstat.utils_3.0-3 rmarkdown_2.22
[5] fs_1.6.2 vctrs_0.6.3 memoise_2.0.1 base64enc_0.1-3
[9] htmltools_0.5.5 Formula_1.2-5 KernSmooth_2.23-21 htmlwidgets_1.6.2
[13] cachem_1.0.8 uuid_1.1-0 mime_0.12 lifecycle_1.0.3
[17] pkgconfig_2.0.3 Matrix_1.5-4.1 R6_2.5.1 fastmap_1.1.1
[21] tidycensus_1.4.1 shiny_1.7.4 digest_0.6.31 colorspace_2.1-0
[25] ps_1.7.5 pkgload_1.3.2 Hmisc_5.1-0 fansi_1.0.4
[29] timechange_0.2.0 httr_1.4.6 polyclip_1.10-4 abind_1.4-5
[33] compiler_4.3.1 proxy_0.4-27 splancs_2.01-43 remotes_2.4.2
[37] withr_2.5.0 htmlTable_2.4.1 backports_1.4.1 DBI_1.1.3
[41] RgoogleMaps_1.4.5.3 pkgbuild_1.4.1 R.utils_2.12.2 rappdirs_0.3.3
[45] sessioninfo_1.2.2 classInt_0.4-9 tools_4.3.1 units_0.8-2
[49] foreign_0.8-84 httpuv_1.6.11 nnet_7.3-19 R.oo_1.25.0
[53] glue_1.6.2 callr_3.7.3 promises_1.2.0.1 grid_4.3.1
[57] sf_1.0-13 checkmate_2.2.0 cluster_2.1.4 generics_0.1.3
[61] gtable_0.3.3 spatstat.data_3.0-1 tzdb_0.4.0 R.methodsS3_1.8.2
[65] class_7.3-22 tidyr_1.3.0 data.table_1.14.8 hms_1.1.3
[69] xml2_1.3.4 utf8_1.2.3 spatstat.geom_3.2-1 pillar_1.9.0
[73] later_1.3.1 lattice_0.21-8 tidyselect_1.2.0 miniUI_0.1.1.1
[77] knitr_1.43 gridExtra_2.3 xfun_0.39 stringi_1.7.12
[81] evaluate_0.21 interp_1.1-4 sgeostat_1.0-27 tibble_3.2.1
[85] cli_3.6.1 rpart_4.1.19 xtable_1.8-4 munsell_0.5.0
[89] processx_3.8.1 Rcpp_1.0.10 spatstat.random_3.1-5 WDI_2.7.8
[93] png_0.1-8 ellipsis_0.3.2 prettyunits_1.1.1 jpeg_0.1-10
[97] profvis_0.3.8 urlchecker_1.0.1 bitops_1.0-7 tigris_2.0.3
[101] e1071_1.7-13 purrr_1.0.1 crayon_1.5.2 rlang_1.1.1
[105] rvest_1.0.3
答:
更新:此 bug 是由 R 语言本身 (v4.3.0) 的更改引入的。我已经更新了 choroplethr 以解决此问题。具有修复程序的 choroplethr 版本是 v3.7.2,您可以通过在控制台上键入来获取它。我在这里留下我的原始答案,以防其他人想更好地了解根本问题。install.packages("choroplethr")
我是choroplethr的作者。感谢您报告此错误。我可以在最新版本的 R (v4.3.1) 上本地重现它。我已将问题追溯到 R 版本 4.3.0 中引入的此更改:
R 4.3.0 中的更改:
用户可见的重大更改:
呼叫 && 或 ||LHS 或(如果评估)RHS 长度更大 比一个现在总是一个错误,带有报告的形式
'length = 4' in coercion to 'logical(1)'
环境变量R_CHECK_LENGTH_1_LOGIC2不再具有任何 影响。
(您可以在此处查看整个更改列表。
该更改会导致以下代码行失败:
if (private$zoom == "alaska" || private$zoom == "hawaii") {
choro = self$render_helper(self$choropleth.df, self$scale_name, self$theme_clean()) + ggtitle(self$title)
if (self$add_state_outline)
{
choro + self$render_state_outline(private$zoom)
}
} else {
# remove AK and HI from the "real" df
continental.df = self$choropleth.df[!self$choropleth.df$state %in% c("alaska", "hawaii"), ]
continental.ggplot = self$render_helper(continental.df, self$scale_name, self$theme_clean()) + ggtitle(self$title)
if (self$add_state_outline)
{
continental.regions = subset(private$zoom, private$zoom!="alaska" & private$zoom!="hawaii")
continental.ggplot = continental.ggplot + self$render_state_outline(continental.regions)
}
简而言之,当您创建国家地图时,参数的长度为 51(50 个州加上 DC),这会导致错误。zoom
我的第一反应是,我不知道他们为什么要引入这个变化。这不是一个很难解决的错误。但我想花一些时间更好地了解他们为什么进行此更改,以及在提交修复之前,他们是否有实现此逻辑的首选方法。
评论
if
if ((length(zoom) == 1) && (zoom %in% c("alaska", "hawaii")))
评论
data(df_pop_state)
state_choropleth(df_pop_state)
df_pop_state
state.regions
all(df_pop_state$region %in% state.regions$region)
TRUE
data(state.regions)