Tentando entender o porquê, quando leio em uma varredura de NDVI, o slot @ data @ values não contém os valores reais até que eu os defina manualmente. Por exemplo:
NDVI <- raster("./filename.tif", crs="+proj=longlat +datum=WGS84")
NDVI@data@values
## returns: logical(0)
Isso não aconteceu com outros rasters carregados pelo mesmo método, por isso estou confuso. Gostaria de poder ser mais específico, mas não me lembro de ter feito algo diferente antes. É fácil obter os valores manualmente, usando:
NDVI1@data@values <- getValues(NDVI19east)
Mas ainda é difícil ter que fazer isso para cada arquivo. Então, pergunta em duas partes:
Por que isso aconteceu em primeiro lugar? Entendo que poderia ter algo a ver com o armazenamento do arquivo raster (ou seja, na memória ou não), mas não consigo entender como isso altera os métodos que devo usar para acessar os dados ...
Existe uma maneira de automatizar esse processo (talvez usando um método semelhante ao lapply) para ler arquivos como RasterLayers e acessar valores para esses arquivos? Meu projeto atual envolve a leitura de 6 a 10 arquivos por vez para NDVI, Rainfall e outras variáveis ambientais, a fim de combiná-los e executar algumas sobreposições ponderadas. Seria útil automatizar o processo de importação dos dados.
logical(0)
fato, é o valor para qualquer objeto Raster * criado a partir de um arquivo. De qualquer forma, como diz o @mdsumner, não leia esses valores diretamente e certamente não os defina! (embora vocêNDVI1@data@values <- getValues(NDVI19east)
não afete nada , esses valores são ignorados). Provavelmente é mais abaixo do seu script que você não entende como usar efetivamente esses objetos. Você pode usar getValues, mas mesmo isso raramente é necessário. Forneça um exemplo simples e independente do que você está tentando alcançar.Respostas:
Esta pergunta foi respondida nos comentários (por mdsummer ). Essa é apenas uma maneira de colocar essas idéias em ordem e tirar essa pergunta da fila sem resposta.
Aqui você pode baixar o NVDI de jpg do mundo inteiro da NASA .
Aqui você tem o código e um arquivo raster para testar .
Como mostrado na pergunta, carregar a varredura no R com a função raster () não carrega os valores reais na memória.
Como você vê, os valores NVDI @ data @ não têm valores enquanto a plotagem pode ser renderizada mostrando esses valores "hiden". Você pode ver que, se você carregar o arquivo no QGIS, os valores serão realmente lidos.
Portanto, você precisa usar a função readAll () do pacote raster (como mdsummer disse nos comentários). Aqui está o código:
Usando esta função, agora você pode acessar os valores de varredura no arquivo.
fonte