2

I am assembling a raster stack of environmental variables to run analytics with Random Forests.

rf <- randomForest(
   x = covar,
   y = d1
 )

Error in randomForest.default(x = covar, y = d1) : 
  NA not permitted in predictors

covar is my raster stack, d1 is my point value object.

str(d1)
 num [1:380] 7.4 7.81 7.75 7.96 7.54 7.25 7.83 7.52 8.02 7.68 ...

str(covar)
'data.frame':   380 obs. of  76 variables:
 $ apr_modmm_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ apr_precip_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ april_temp_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ aspect_guanajuato_250mx: num  NA NA NA NA NA NA NA NA NA NA ...
 $ aug_modmm_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ aug_precip_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ aug_temp_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ bd_0_250mx             : num  NA NA NA NA NA NA NA NA NA NA ...
 $ bd_10_250mx            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ bd_5_250mx             : num  NA NA NA NA NA NA NA NA NA NA ...
 $ cec_0_250mx            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ cec_15_250mx           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ cec_5_250mx            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ cly_0_250mx            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ cly_10_250mx           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ cors_0_250mx           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ cors_10_250mx          : num  NA NA NA NA NA NA NA NA NA NA ...
 $ cors_5_250mx           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ dec_modmm_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ dec_precip_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ dec_temp_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ dem_250mx              : num  NA NA NA NA NA NA NA NA NA NA ...
 $ dep_precip_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ feb_modmm_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ feb_precip_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ feb_temp_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ jan_modmm_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ jan_precip_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ jan_temp_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ jul_modmm_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ jul_precip_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ july_temp_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ jun_modmm_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ june_precip_250mx      : num  NA NA NA NA NA NA NA NA NA NA ...
 $ june_temp_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ mar_modmm_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ mar_precip_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ march_temp_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ may_modmm_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ may_precip_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ may_temp_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ndvi_0119_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ndvi_0319_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ndvi_0419_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ndvi_0519_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ndvi_0619_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ndvi_1218_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ nov_modmm_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ nov_precip_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ nov_temp_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oct_modmm_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oct_precip_250mx       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oct_temp_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ph_0_250mx             : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ph_15_250mx            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ph_5_250mx             : num  NA NA NA NA NA NA NA NA NA NA ...
 $ rgb_0119_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ rgb_0319_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ rgb_0419_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ rgb_0519_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ rgb_0619_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ rgb_1218_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ sep_modmm_250mx        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ sep_temp_250mx         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ slp_250mx              : num  NA NA NA NA NA NA NA NA NA NA ...
 $ slt_0_250mx            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ slt_15_250mx           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ slt_5_250mx            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ snd_0_250mx            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ snd_15_250mx           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ snd_5_250mx            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ som_0_250mx            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ som_10_250mx           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ som_5_250mx            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ taxp_250mx             : num  NA NA NA NA NA NA NA NA NA NA ...
 $ taxus_250mx            : num  NA NA NA NA NA NA NA NA NA NA ...

All of my environmental variables have NA vales, so I think this is where the problem is.

This is where I have got to so far, using one example.

I am importing .tif files into R, then using the raster function. The object looks good and shows the values. It also plots well and produces a histogram of the of the values. However, when I inspect the data slot more closely the values are all NA. It seems this may be the error. However, I am not sure what the problem is?

aspect_250 <- raster("aspect_guanajuato_250m.tif", layer = 1, values = TRUE)

aspect_250
class      : RasterLayer 
dimensions : 1000, 1000, 1e+06  (nrow, ncol, ncell)
resolution : 249.3105, 217.3383  (x, y)
extent     : 175488, 424798.5, 2201959, 2419297  (xmin, xmax, ymin, ymax)
crs        : +proj=utm +zone=14 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0  
names      : aspect_guanajuato_250m 
values     : 4.023071, 354.3721  (min, max)

summary(aspect_250)
        aspect_guanajuato_250m
Min.                  5.658854
1st Qu.             132.651470
Median              182.637779
3rd Qu.             231.543999
Max.                353.780945
NA's                  0.000000

plot(aspect_250)

  [1]: https://i.stack.imgur.com/0SZFu.png

str(aspect_250)
Formal class 'RasterLayer' [package "raster"] with 12 slots
  ..@ file    :Formal class '.RasterFile' [package "raster"] with 13 slots
  .. .. ..@ name        : chr "C:\\Users\\DGUERENA\\Google Drive\\CIMMYT\\IDP\\Soils\\DSM\\DSM_guanajuato\\aspect_guanajuato_250m.tif"
  .. .. ..@ datanotation: chr "FLT4S"
  .. .. ..@ byteorder   : chr "little"
  .. .. ..@ nodatavalue : num -Inf
  .. .. ..@ NAchanged   : logi FALSE
  .. .. ..@ nbands      : int 1
  .. .. ..@ bandorder   : chr "BIL"
  .. .. ..@ offset      : int 0
  .. .. ..@ toptobottom : logi TRUE
  .. .. ..@ blockrows   : int 2
  .. .. ..@ blockcols   : int 1000
  .. .. ..@ driver      : chr "gdal"
  .. .. ..@ open        : logi FALSE
  ..@ data    :Formal class '.SingleLayerData' [package "raster"] with 13 slots
  .. .. ..@ values    : logi(0) 
  .. .. ..@ offset    : num 0
  .. .. ..@ gain      : num 1
  .. .. ..@ inmemory  : logi FALSE
  .. .. ..@ fromdisk  : logi TRUE
  .. .. ..@ isfactor  : logi FALSE
  .. .. ..@ attributes: list()
  .. .. ..@ haveminmax: logi TRUE
  .. .. ..@ min       : num 4.02
  .. .. ..@ max       : num 354
  .. .. ..@ band      : int 1
  .. .. ..@ unit      : chr ""
  .. .. ..@ names     : chr "aspect_guanajuato_250m"
  ..@ legend  :Formal class '.RasterLegend' [package "raster"] with 5 slots
  .. .. ..@ type      : chr(0) 
  .. .. ..@ values    : logi(0) 
  .. .. ..@ color     : logi(0) 
  .. .. ..@ names     : logi(0) 
  .. .. ..@ colortable: logi(0) 
  ..@ title   : chr(0) 
  ..@ extent  :Formal class 'Extent' [package "raster"] with 4 slots
  .. .. ..@ xmin: num 175488
  .. .. ..@ xmax: num 424799
  .. .. ..@ ymin: num 2201959
  .. .. ..@ ymax: num 2419297
  ..@ rotated : logi FALSE
  ..@ rotation:Formal class '.Rotation' [package "raster"] with 2 slots
  .. .. ..@ geotrans: num(0) 
  .. .. ..@ transfun:function ()  
  ..@ ncols   : int 1000
  ..@ nrows   : int 1000
  ..@ crs     :Formal class 'CRS' [package "sp"] with 1 slot
  .. .. ..@ projargs: chr "+proj=utm +zone=14 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"
  ..@ history : list()
  ..@ z       : list()

head(aspect_250[], 200)
  [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 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [56] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[111] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[166] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

From previous posts I tried readALL, nothing.

aspect.all <- readAll(aspect_250)
str(aspect.all)
str(aspect.all)
Formal class 'RasterLayer' [package "raster"] with 12 slots
  ..@ file    :Formal class '.RasterFile' [package "raster"] with 13 slots
  .. .. ..@ name        : chr "C:\\Users\\DGUERENA\\Google Drive\\CIMMYT\\IDP\\Soils\\DSM\\DSM_guanajuato\\aspect_guanajuato_250m.tif"
  .. .. ..@ datanotation: chr "FLT4S"
  .. .. ..@ byteorder   : chr "little"
  .. .. ..@ nodatavalue : num -Inf
  .. .. ..@ NAchanged   : logi FALSE
  .. .. ..@ nbands      : int 1
  .. .. ..@ bandorder   : chr "BIL"
  .. .. ..@ offset      : int 0
  .. .. ..@ toptobottom : logi TRUE
  .. .. ..@ blockrows   : int 2
  .. .. ..@ blockcols   : int 1000
  .. .. ..@ driver      : chr "gdal"
  .. .. ..@ open        : logi FALSE
  ..@ data    :Formal class '.SingleLayerData' [package "raster"] with 13 slots
  .. .. ..@ values    : num [1:1000000] NA NA NA NA NA NA NA NA NA NA ...
  .. .. ..@ offset    : num 0
  .. .. ..@ gain      : num 1
  .. .. ..@ inmemory  : logi TRUE
  .. .. ..@ fromdisk  : logi FALSE
  .. .. ..@ isfactor  : logi FALSE
  .. .. ..@ attributes: list()
  .. .. ..@ haveminmax: logi TRUE
  .. .. ..@ min       : num 4.02
  .. .. ..@ max       : num 354
  .. .. ..@ band      : int 1
  .. .. ..@ unit      : chr ""
  .. .. ..@ names     : chr "aspect_guanajuato_250m"
  ..@ legend  :Formal class '.RasterLegend' [package "raster"] with 5 slots
  .. .. ..@ type      : chr(0) 
  .. .. ..@ values    : logi(0) 
  .. .. ..@ color     : logi(0) 
  .. .. ..@ names     : logi(0) 
  .. .. ..@ colortable: logi(0) 
  ..@ title   : chr(0) 
  ..@ extent  :Formal class 'Extent' [package "raster"] with 4 slots
  .. .. ..@ xmin: num 175488
  .. .. ..@ xmax: num 424799
  .. .. ..@ ymin: num 2201959
  .. .. ..@ ymax: num 2419297
  ..@ rotated : logi FALSE
  ..@ rotation:Formal class '.Rotation' [package "raster"] with 2 slots
  .. .. ..@ geotrans: num(0) 
  .. .. ..@ transfun:function ()  
  ..@ ncols   : int 1000
  ..@ nrows   : int 1000
  ..@ crs     :Formal class 'CRS' [package "sp"] with 1 slot
  .. .. ..@ projargs: chr "+proj=utm +zone=14 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"
  ..@ history : list()
  ..@ z       : list()
  • Visually examining large data can be highly misleading. In the case of rasters, there are often an high number of NA values along the edges of irregular study areas. The will likely show up first. Have you tried simply plotting the raster and overlaying the sample points? Perhaps there is an unintentional mismatch. Your raster is reporting a min/max so, there are values associated with it. Try: plot(aspect_250); plot(pts, pch=19, add=TRUE) – Jeffrey Evans Jul 31 at 17:04
  • 1
    If you want to see if all values in a raster are NA, use all(is.na(r[])) – Spacedman Jul 31 at 17:45
1

Thanks for the responses. Indeed, the issue was with the CRS. The native CRS for the data I used was WGS 84 lat-long. The CRS of the mask I was clipping to was UTM14. As the CRS did not share the same extend, all of the values from the point data were excluded. When I imported the point data, I first set the CRS to UTM14. However, this transformation did not change the CRS from lat-long or changed the extent. I still do not understand exactly why this was the case... I had to first set the CRS of the point data to WGS 84, then use SP transform to change the CRS to UTM14. When I did this the extents both matched.

Thanks for the suggestions!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.