为什么在R中使用“raster”上传时,WorldClim栅格的值中有大量的NA?

k2arahey  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(138)

我尝试上传从WorldClim下载的.tif文件用于SDM项目。我使用了raster函数,但是,当我使用getValues时,它会导致大量的NA,从而降低了SDM的可靠性。
我已经下载了历史环境值,res=10m WorldClim的***温度、降水量和海拔数据***到这些.tif文件中,然后我使用这些代码来设置研究区域。(getData对我不起作用,这就是为什么我必须下载它。

temp<-raster("wc2.1_10m_bio_1.tif")
getValues (temp)

>  [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
  [32] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
  [63] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
  [94] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [125] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [156] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [187] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [218] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [249] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [280] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [311] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [342] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [373] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [404] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [435] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [466] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [497] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [528] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [559] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [590] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [621] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [652] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [683] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [714] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [745] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [776] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [807] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [838] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [869] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [900] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [931] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [962] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [993] NA NA NA NA NA NA NA NA
 [ reached getOption("max.print") -- omitted 2331800 entries ]

preci<- raster("wc2.1_10m_bio_12.tif") #getValues gives the same story as temp
elev<- raster("wc2.1_10m_elev.tif")#getValues gives the same story as temp
Asia<- ne_countries(scale="medium", type="map_units", returnclass="sf", country=c('Myanmar','Thailand','Laos','Cambodia','Vietnam'))
study_area<- select(Asia, geometry, name_long)
elev<- mask(elev,study_area) #getValues has not changed, still includes tons of NAs
temp<- mask(temp,study_area)
preci<- mask(preci,study_area)

envi_stack<-stack(elev, temp, preci)
names(envi_stack)<- c("elev", "temp", "preci")
ex<- extent(90, 112, 4, 30)
envi<- crop(envi_stack, ex)
names(envi)<- c("elev", "temp", "preci")
plot(envi)

我不知道应该采取什么不同的做法来从WorldClim获得完整的环境信息。我希望这3个变量的堆栈没有NA,这样我就可以运行我的SDM,没有有限的环境变量。这是我第一次发布问题,所以请让我知道,如果我可以提供更清楚的说明。非常感谢。

6fe3ivhb

6fe3ivhb1#

我只是想重现你的问题。我做了这个快速而肮脏的测试(文件是从worldclim下载的,是“bio 10m”数据):

file <- "C:/Users/Manuel/Desktop/wc2.1_10m_bio/wc2.1_10m_bio_1.tif"
temp <- raster(file)

plot(is.na(temp))
ex <- extent(90, 112, 4, 30)
plot(ex, add = TRUE, col = "red")

图中显示了一幅白色的陆地和一种颜色的海洋Map。这表明大多数值只是NA,因为这些数据点位于海洋中,而数据库没有测量数据:

这对我也很有效:

require(raster)

wclim <- getData("worldclim", var = "bio", res = 10)
plot(wclim[[1]], xlim = c(90, 112), ylim = c(4, 30))

temp <- wclim[[1]]
preci <- wclim[[12]]
elev <- wclim[[2]]

elev <- crop(elev, ex)
temp <- crop(temp, ex)
preci <- crop(preci, ex)

envi_stack <- stack(elev, temp, preci)
names(envi_stack)<- c("elev", "temp", "preci")

plot(envi_stack)

(我排除了您使用我尚未安装的附加R包的部分。)
如果有疑问,我通常会通过运行以下代码行来检查数据集是否包含“合理”的值:

which(!is.na(getValues(temp)))

这将打印出所有非NA值的索引。如果答案为空,则栅格中没有数据。这将表明您选择了一个不合适的区域,没有任何数据点,或者您的数据存在问题。或者,在使用栅格数据时,您只需打开QGIS、ArcGIS Pro、或类似的程序,然后将栅格拖放到其中以检查它所包含的内容。然而,正如我已经演示过的,您正在使用的数据库显然没有提供海洋表面的测量值,至少对于某些变量是如此。

相关问题