在尝试将栅格层转换为单独的ASCII文件时,options(scipen = opsci) 出错?

编程语言 2026-07-08

我正在整理来自worldclim的 19个生物气候变量的数据,面向欧洲,用于Maxent模型软件。

我将数据以空间栅格的形式获取,并尝试将空间栅格中的每一层(对应每个生物气候变量)转换为单独的ASCII文件,过程如下:

#Downloading the climate data from worldclim for the whole globe

bioclim_2.5.world.1970to2000 <- geodata::worldclim_global(var = 'bio', res = 2.5, download = T, path = "Worldclim_bio_2.5")

#Cropping the bioclim data for study area

Europe.extent <- ext(-24, 69, 35, 82)
bioclim_2.5.Europe.1970to2000 <- crop(bioclim_2.5.world.1970to2000, Europe.extent)

#Putting saved data into ascii format for maxent software

names(bioclim_2.5.Europe.1970to2000)
 [1] "wc2.1_2.5m_bio_1"  "wc2.1_2.5m_bio_2"  "wc2.1_2.5m_bio_3" 
 [4] "wc2.1_2.5m_bio_4"  "wc2.1_2.5m_bio_5"  "wc2.1_2.5m_bio_6" 
 [7] "wc2.1_2.5m_bio_7"  "wc2.1_2.5m_bio_8"  "wc2.1_2.5m_bio_9" 
[10] "wc2.1_2.5m_bio_10" "wc2.1_2.5m_bio_11" "wc2.1_2.5m_bio_12"
[13] "wc2.1_2.5m_bio_13" "wc2.1_2.5m_bio_14" "wc2.1_2.5m_bio_15"
[16] "wc2.1_2.5m_bio_16" "wc2.1_2.5m_bio_17" "wc2.1_2.5m_bio_18"
[19] "wc2.1_2.5m_bio_19"

writeRaster(stack(bioclim_2.5.Europe.1970to2000), filename=names(bioclim_2.5.Europe.1970to2000), bylayer=TRUE, format="ascii", overwrite = TRUE)

当我尝试运行最后一段代码时,它会为第一个生物气候变量(wc2.1_2.5m_bio_1)生成一个ASCII文件,然而随后出现以下错误,且没有生成其他ASCII文件。

Error in options(scipen = opsci) : invalid 'scipen'

有人知道为什么会出现这个错误,或为什么似乎只生成第一层的ASCII文件吗?

解决方案

我觉得你把 “terra” 与 “raster” 的用法混淆了。下面给出在 “terra” 下的做法:

library(terra)
s <- rast(system.file("ex/logo.tif", package="terra"))
nms <- paste0(names(s), ".asc")
x <- writeRaster(s, nms, overwrite=TRUE)
basename(sources(x))
#[1] "red.asc"   "green.asc" "blue.asc" 

#or like this 
x <- writeRaster(s, names(x), filetype="AAIGrid", overwrite=TRUE)

因此你的代码将会是

writeRaster(bioclim_2.5.Europe.1970to2000, 
       filename=names(bioclim_2.5.Europe.1970to2000), 
       filetype="AAIGrid", overwrite = TRUE)

另外:如果你通过R/predicts包使用maxent,这些步骤就不需要了。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章