Циклический код для экспорта растра из стека

Я пытаюсь закодировать цикл, который создает и экспортирует растры из стека. Стек состоит из данных для 20 отдельных животных, которые я обработал из исходного фрейма данных (например, animal$ID). Вот код, который я написал до сих пор.

uni<-unique(animal$ID)

for (i in 1:length(uni)){
    subtest<- animalstack [i]  
    ras<-raster(subtest[[1]])
    values(ras)<- values(subtest[[1]])
    outrasname<- paste("DIRECTORY", paste('animal_ID',   
    as.character(uni[l]),sep="_"),sep="/") 
    writeRaster(ras, outrasname, format="HFA")
}

Однако я получаю следующую ошибку:

Ошибка в (функции (классы, fdef, mtable): невозможно найти унаследованный метод для функции «растр» для сигнатуры «числовой».


person Casey Brown    schedule 14.07.2016    source источник
comment
Откуда взялась эта raster() функция? Это пакет или вы его писали? Было бы неплохо посмотреть код.   -  person FisherDisinformation    schedule 14.07.2016


Ответы (2)


Вы также можете использовать аргумент bylayer и сделать это в одной строке:

writeRaster(animalstack, "animal_ID", bylayer=TRUE, format="HFA")
person Robert Hijmans    schedule 14.07.2016

Думаю, вы ищете что-то вроде этого:

uni<-unique(animal$ID)

for (i in 1:length(uni)){
    ras <- subtest[[i]]
    outrasname<- paste("DIRECTORY", paste('animal_ID',   
    as.character(uni[i]),sep="_"),sep="/") 
    writeRaster(ras, outrasname, format="HFA")
}

Когда вы разделяете стек, оператор [] дает вам значения этого номера ячейки для каждого слоя. Вот почему вы получали ошибку. Оператор [[]] возвращает указанный слой из стека.

person Jacob F    schedule 14.07.2016