state_choropleth不适用于 >1 状态

state_choropleth not working for >1 state

提问人:Eponymous 提问时间:6/26/2023 最后编辑:Eponymous 更新时间:7/13/2023 访问量:138

问:

尝试一个非常基本的状态分区统计:

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          
r choroplethr

评论

0赞 Ari 6/26/2023
我认为您应该在调用之前添加第一个代码块data(df_pop_state)state_choropleth(df_pop_state)
0赞 Eponymous 6/26/2023
@Ari 没有区别。
0赞 Ari 6/26/2023
啊,你使用的是比我更新的 R 版本。让我更新并重试。
0赞 Ari 6/26/2023
是的。我现在收到同样的错误。这很糟糕。
0赞 I_O 6/26/2023
只是为了排除错误源:中的所有区域是否都与 中的区域完全相同,即是否返回?您可能需要加载 State.Regions:df_pop_statestate.regionsall(df_pop_state$region %in% state.regions$region)TRUEdata(state.regions)

答:

1赞 Ari 6/26/2023 #1

更新:此 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

我的第一反应是,我不知道他们为什么要引入这个变化。这不是一个很难解决的错误。但我想花一些时间更好地了解他们为什么进行此更改,以及在提交修复之前,他们是否有实现此逻辑的首选方法。

评论

1赞 Eponymous 6/26/2023
好的,太好了。感谢您的检查。如果要快速修复,我不会抱怨,而您则要弄清楚如何以正确的方式进行修复。:-)
0赞 Ari 6/27/2023
@Eponymous 如果您将有问题的语句替换为,那么它适用于我的机器。我已经发布到 r-devel 邮件列表,看看这是否是首选的解决方法。ifif ((length(zoom) == 1) && (zoom %in% c("alaska", "hawaii")))
1赞 Eponymous 6/27/2023
谢谢。我意识到我不太确定如何在本地实施修复程序,所以我就等着吧。
0赞 Ari 6/28/2023
@Eponymous 当 CRAN 上有新版本的 choroplethr 可用时,我将更新此线程。
1赞 Eponymous 7/8/2023
感谢您的回复和快速修复,当然还有丰富的资源。