2016-07-14 9 views
0

Я пытаюсь закодировать цикл, который создает и экспортирует растры из стека. Стек состоит из данных для 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") 
} 

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

Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘raster’ for signature ‘"numeric"’.

+0

Где что 'растр()' функция взялось? Это пакет или вы его написали? Было бы неплохо посмотреть на код. – FisherDisinformation

ответ

0

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

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") 
} 

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

1

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

writeRaster(animalstack, "animal_ID", bylayer=TRUE, format="HFA")