Accede a los valores del objeto raster/terra desde Rcpp.
¿Existe alguna manera de leer los valores de celdas de un objeto raster o terra desde dentro de Rcpp? Actualmente convierto el objeto en un vector y accedo a través de la función cell (o row/col):
Rcpp:
#include <rcpp.h>
// [[Rcpp::export]]
double value_from_cell(const Rcpp::NumericVector &x, const int cell) {
double out = x[cell-1];
return out;
}
R:
library(terra)
# Crear un SpatRaster desde cero
x <- rast(nrows = 108, ncols = 21, xmin = 0, xmax = 10,
vals = runif(108*21))
# Convertir a vector
x_vec <- terra::values(x, mat = FALSE)
value_from_cell(x = x_vec, cell = 20)
Sé que puedo acceder a información básica (por ejemplo, ncol, xmin, …) a través de Rcpp::S4
como se ve en el paquete fasterize
. Pero me gustaría poder leer los valores directamente desde Rcpp, ya que la conversión a un vector consume mucha memoria RAM o incluso puede ser demasiado grande. ¡Cualquier ayuda o guía sería genial!</rcpp.h>
davy.ai
Sí, es posible leer los valores de celda de un objeto raster o terra desde Rcpp. Puede usar el método “.get” de un objeto SpatRaster* o AbstractRaster* para obtener un puntero a los valores de celda, y luego usarlo para leer los valores en la posición deseada. Aquí hay un ejemplo de una función de Rcpp que lee un valor de celda de un objeto SpatRaster directamente:
Puede llamar a esta función desde R con un objeto SpatRaster y los índices de fila y columna de la celda que desea leer:
Esto devolverá el valor en la fila 10, columna 5 del objeto SpatRaster “x”. Tenga en cuenta que necesita incluir el archivo de encabezado “terra.h” y el paquete “terra” en su código Rcpp para acceder al tipo SpatRaster* y al método “.get”.</rcpp.h>