raster包raster函数运行示例代码报错求助
问题:raster包raster函数创建对象时报错
近期使用raster包的raster()函数时出现异常,此前该函数运行正常。执行官方帮助文档中的示例代码:
library(raster) # from scratch r1 <- raster(nrows=108, ncols=21, xmn=0, xmx=10)
触发如下错误:
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘res’ for signature ‘"BasicRaster"’
已排查操作
- 确认未加载其他包含
raster()函数的包,但发现res()函数同时存在于terra和raster包中。 - 尝试使用conflicted包设置terra为
res()函数的优先包,代码如下:
conflicted::conflict_prefer(name = "res", winner = "terra")
会话信息
R version 4.3.1 (2023-06-16 ucrt) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 11 x64 (build 22631) Matrix products: default locale: [1] LC_COLLATE=English_United States.utf8 LC_CTYPE=English_United States.utf8 [3] LC_MONETARY=English_United States.utf8 LC_NUMERIC=C [5] LC_TIME=English_United States.utf8 time zone: America/Denver tzcode source: internal attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] reshape2_1.4.4 ggExtra_0.10.1 extrafont_0.19 readxl_1.4.3 cowplot_1.1.2 [6] raster_3.6-26 tidyr_1.3.0 vegan_2.6-4 lattice_0.21-8 permute_0.9-7 [11] data.table_1.14.8 elevatr_0.99.0 stars_0.6-4 abind_1.4-5 sp_2.1-1 [16] sf_1.0-14 dplyr_1.1.3 ggplot2_3.4.4 loaded via a namespace (and not attached): [1] tidyselect_1.2.0 viridisLite_0.4.2 farver_2.1.1 fastmap_1.1.1 reshape_0.8.9 [6] promises_1.2.1 digest_0.6.33 mime_0.12 lifecycle_1.0.3 cluster_2.1.4 [11] ellipsis_0.3.2 terra_1.7-55 magrittr_2.0.3 compiler_4.3.1 rlang_1.1.1 [16] tools_4.3.1 utf8_1.2.3 yaml_2.3.7 knitr_1.45 FNN_1.1.4 [21] labeling_0.4.3 bit_4.0.5 classInt_0.4-10 curl_5.1.0 plyr_1.8.9 [26] KernSmooth_2.23-21 miniUI_0.1.1.1 withr_2.5.1 purrr_1.0.2 grid_4.3.1 [31] fansi_1.0.5 xts_0.13.2 xtable_1.8-4 e1071_1.7-13 colorspace_2.1-0 [36] progressr_0.14.0 extrafontdb_1.0 scales_1.2.1 MASS_7.3-60 cli_3.6.1 [41] rmarkdown_2.25 crayon_1.5.2 intervals_0.15.4 generics_0.1.3 cachem_1.0.8 [46] DBI_1.1.3 proxy_0.4-27 stringr_1.5.0 splines_4.3.1 parallel_4.3.1 [51] cellranger_1.1.0 vctrs_0.6.4 Matrix_1.6-3 bit64_4.0.5 units_0.8-4 [56] glue_1.6.2 codetools_0.2-19 gstat_2.1-1 stringi_1.7.12 gtable_0.3.4 [61] later_1.3.1 munsell_0.5.0 tibble_3.2.1 pillar_1.9.0 htmltools_0.5.7 [66] R6_2.5.1 conflicted_1.2.0 automap_1.1-9 evaluate_0.22 shiny_1.8.0 [71] memoise_2.0.1 httpuv_1.6.12 class_7.3-22 Rcpp_1.0.11 nlme_3.1-163 [76] Rttf2pt1_1.3.12 spacetime_1.3-1 mgcv_1.8-42 xfun_0.41 zoo_1.8-12 [81] pkgconfig_2.0.3
解决方案
1. 修正res函数优先级设置
错误根源是terra包的res()函数无法识别raster包的BasicRaster类,应将raster包的res()设为优先:
conflicted::conflict_prefer(name = "res", winner = "raster")
设置完成后重新执行raster()函数创建对象即可。
2. 升级相关包到最新版本
若上述方法无效,尝试升级raster和terra包到最新版,解决版本兼容性问题:
install.packages(c("raster", "terra"))
3. 临时指定raster包的res函数
在创建raster对象前,手动触发raster包的res方法加载,确保方法绑定正确:
# 先加载raster包的res方法 raster::res(raster()) # 再执行创建代码 r1 <- raster(nrows=108, ncols=21, xmn=0, xmx=10)
内容的提问来源于stack exchange,提问作者Nathan Tomczyk
相关产品推荐
相关产品推荐

