4 votos

¿Diferencia entre Rasterlayer grande y Raster Layer de clase formal en R?

Actualmente poseo dos rásteres con la EXACTA MISMA resolución y extensión, y sin embargo muestran diferente número de filas cuando se cargan en el entorno global en R.

Además, antes de que estos rásteres se convirtieran en un marco de datos en R utilizando la función asctodataframe() en R, se apilaron inicialmente y el El PCA se calculó con la función rasterPCA() y, a continuación, obtuve los rásteres en la instantánea que se muestra a continuación.

enter image description here

Sin embargo, los rásteres individuales se cargaron como una gran capa ráster y una capa ráster de clase formal. ¿Cuál es la diferencia entre ambas? ¿Y esta diferencia provoca un cambio en el número de filas cuando se carga en R.

Instantánea de rasters individuales:

enter image description here

Para más información: consulte Misma extensión y resolución de los rastreos, pero diferente número de celdas


library(raster)
library(RStoolbox)

###################################
##Loading the Present day variables and then creating a raster stack, followed by a PCA
##################################

bio3 <- raster("C:\\Users\\rameshv\\4_ForR\\bio3")
bio4 <- raster("C:\\Users\\rameshv\\4_ForR\\bio4")
bio5 <- raster("C:\\Users\\rameshv\\\4_ForR\\bio5")

pres_stack <- stack(bio3, bio4,bio5)

pre_pca <-  rasterPCA(pres_stack, nComp = 2) #Choosing the first two axes

#Note: YOU NEED TO CALL the right element, else it will not writeRaster
writeRaster(pre_pca$map,"C:\\Users\\rameshv\\Downloads\\5_PCAforR\\PC.asc", format="ascii", bylayer=T)

#################################
##Loading the LGM variables and then creating a raster stack, followed by a PCA

lg3 <- raster("C:\\Users\\rameshv\\4_ForR\\cclgmbi3")
lg4 <- raster("C:\\Users\\rameshv\\4_ForR\\cclgmbi4")
lg5 <- raster("C:\\Users\\rameshv\\4_ForR\\cclgmbi5")

lg_stack <- stack(lg3,lg4,lg5)

lg_pca <- rasterPCA(lg_stack, nComp = 2) #Choosing the first two axes

#Note: YOU NEED TO CALL the right element, else it will not writeRaster
writeRaster(lg_pca$map,"C:\\Users\\rameshv\\5_PCAforR\\PC.asc", format="ascii", bylayer=T)

#########Now I have two rasters that are PC1 and PC2 of the variables    chosen and shall run the multivariate code provided by Hamann et al., 2015

library(SDMTools)     # install package to read and write ESRI ASCII grids
library(yaImpute)     # install package for k-nearest neighbour (kNN) search

lg1 <- asc2dataframe("C:\\Users\\rameshv\\5_PCAforR\\PC_1.asc") 
lg2 <- asc2dataframe("C:\\Users\\rameshv\\5_PCAforR\\PC_2.asc")
present1  <- asc2dataframe("C:\\Users\\rameshv\\5_PCAforR\\PC_1.asc")
present2  <- asc2dataframe("C:\\Users\\rameshv\\5_PCAforR\\PC_2.asc")

> str(lg1)
 'data.frame':   44352 obs. of  3 variables:
  $ y    : num  2209806 2209806 2209806 2209806 2209806 ...
  $ x    : num  -5265209 -5260209 -5250209 -5245209 -5240209 ...
  $ var.1: num  -260 -252 -214 -198 -187 ...
   - attr(*, "filenames")=List of 2
  ..$      : chr "C:\\Users\\rameshv\\Downloads\\Climate Stability\\Data_LGM_Present\\LGM\\5_PCAforR\\PC_1.asc"
  ..$ names: chr "var.1"

  > str(present1)
   'data.frame':   44340 obs. of  3 variables:
    $ y    : num  2209806 2209806 2209806 2209806 2209806 ...
    $ x    : num  -5265209 -5260209 -5250209 -5245209 -5240209 ...
    $ var.1: num  -38.26 -32.95 -8.26 3.47 9.82 ...
    - attr(*, "filenames")=List of 2
    ..$      : chr "C:\\Users\\rameshv\\Downloads\\Climate Stability\\Data_LGM_Present\\Present\\5_PCAforR\\PC_1.asc"
    ..$ names: chr "var.1"

3voto

Dan Puntos 16

En primer lugar, por favor, mira los objetos en R y no en RStudio, o cualquier IDE que estés utilizando. Ha habido continuos problemas con los objetos espaciales en RStudio y no lo considero fiable. También sería útil que proporcionaras tu código para que podamos rastrear cómo se creó cada objeto.

He echado un vistazo al código fuente de la función rasterPCA y la clase de objeto Large RasterLayer no se asigna en la función. Me pregunto si el nombre del objeto viene de RStudio. Yo no me preocuparía porque creo que estos objetos siguen siendo formalmente objetos RasterLayer y RasterStack.

La diferencia en el número de filas, columnas y valores ( de su anterior puesto ) podría atribuirse a que la información del objeto espacial no se muestra correctamente en el IDE o a que la función no asigna los valores correctamente. La función rasterPCA consiste en: 1) tomar una muestra, 2) predecir los valores del raster, 3) asignar los valores predichos al raster. El código parece correcto y cuando lo he utilizado, no he observado ningún problema. Hay que tener en cuenta que la función puede producir valores NA que también pueden afectar al número de valores mostrados en la trama. El elemento crítico es que el número de filas, columnas y extensión geográfica no cambie.

0 votos

Basándome en su sugerencia, he adjuntado el código. El problema surge cuando utilizo la función asc2dataframe, creo. Tienes razón en que la función rasterPCA parece correcta. De hecho, excluí la función rasterPCA y procedí a convertir los rasters en un dataframe, sin tomar los valores de PC, y aún así veo una diferencia en el número de filas. Y sí, he estado usando RStudio hasta ahora y no he tenido ningún problema.

0 votos

Acabo de probarlo en R, y de actualizarlo por encima.

0 votos

El problema parece estar relacionado con asc2dataframe y no con raster. Simplemente coaccione la pila pca directamente usando getValues. Esto resultará en un data.frame con una columna para cada raster y omitirá la escritura y luego la lectura del raster. Creo que la diferencia de valores se atribuye a los NA's.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X