I am trying to uploading the .tif files downloaded from WorldClim for a SDM project. I have use raster
function, however, it results in tons of NAs when I getValues
and consequently reduce the reliability of my SDMs.
I have downloaded the historical environmental values, res=10m WorldClim's temperature, precipitation and elevation data to these .tif files, which then I used these code to set up the study area. (getData
does not work for me, that's why I have to download it.
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)
I don't know what should have been done differently to get full environmental information from WorldClim. I am expecting a stack of these 3 variables without NAs, so that I can run my SDM on without limited environmental variables. It's one of my first times posting questions, so please let me know if I can provide clearer clarification. Thank you so much.
I just tried to reproduce your problem. I did this quick and dirty test (the file was downloaded from worldclim and is the "bio 10m" data):
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")
which showed a map of the Earth's landmass in white and the oceans in one colour. This indicates that most values are simply NA
because those data points are located in the ocean where the database has no measurements:
This also worked for me:
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)
(I excluded the part where you used an additional R package I have not installed.)
When in doubt, I usually check whether the data set contains "reasonable" values by running something in the lines of:
which(!is.na(getValues(temp)))
This should print out the indices of all values that are not NA
. If the answer is empty, you have no data in your raster. This would indicate either that you selected an unfortunate area without any data points or that there is an issue with your data. Alternatively, when using raster data, you can simply open QGIS, ArcGIS Pro, or a similar program and drag-and-drop the raster in there to inspect what it contains. However, as I already demonstrated, the database you are using apparently does not provide measurements for ocean surfaces for at least some of your variables.