La soluzione necessaria, l'aiuto sarà molto apprezzato.Esecuzione di loop nell'elenco di elenchi di raster
Nel seguente codice sto creando tre raster. Creo quindi un numero casuale number
di punti su questo raster e sto ricevendo un elenco di tre matrici con le coordinate di quelle posizioni casuali chiamate samples
. Quindi prendo quelle posizioni e provo i valori raster per ricevere samplevalues
.
Quello che voglio cambiare è che voglio creare un set di 100,150,200 e 250 posizioni di punti casuali (numberv
). Quindi, dopo aver generato queste posizioni e aver ricevuto un elenco di posizioni, ogni raster sarà campionatovolte (in questo caso 4 volte). Dato che ho tre raster, mi piacerebbe ottenere una lista con il primo elemento, compresi i valori campione ottenuti dai miei tre raster campionati 100 volte ciascuno, il secondo con valori raster campionati 150 volte ciascuno, ecc. L'elenco avrebbe elementi length(numberv)
. Quindi userei quelle posizioni per ottenere i valori raster in queste posizioni.
Ho incollato il codice pulito per un caso più semplice con un solo campione (1 elemento vettore number
utilizzato), sperare che sia d'aiuto.
y <- matrix(1:300,100,3)
mv <- c(1,2,3)
rep = 200
valuematrix <- vector("list",ncol(y))
for (i in 1:ncol(y)) {
newmatrix <- replicate(rep,y[,i])
valuematrix[[i]] <- newmatrix
}
library(sp)
library(raster)
rasters <- setNames(lapply(valuematrix, function(x) raster(x)),
paste0('raster',1:length(mv)))
# Create a loop that will sample the rasters
library(dismo)
number = 100 # current number for random sample points number
numberv = c(100,150,200,250) # sample number vector i want to use
# samples below will hold only coordinate values:
samples <- setNames(lapply(rasters, function(x) randomPoints(raster(x),
n=number)),
paste0('sample',1:length(mv)))
samplevalues <- vector("list",ncol(y))
for (i in 1:ncol(y)) {
samplevalues[[i]] <- data.frame(samples[[i]],extract(rasters[[i]],
samples[[i]]))
}
grazie mille, è esattamente quello che mi serviva :) – MIH
prego. –
come la funzione sample.extract potrebbe essere ristrutturata, quindi dovremmo prendere sample.set [[1]] [2] per ottenere il valore raster dai raster [1]. Quindi sample.set [[1]] [3] e ottieni il valore raster dai raster [2]. Il risultato sarebbe un elenco di 4 elementi, ogni elemento sarebbe un elenco di due elementi. Ho postato una nuova domanda qui http://stackoverflow.com/questions/31585708/sampling-with-list-of-rasters-and-locations-using-function-in-r – MIH