2013-10-24 3 views
0

Надеюсь, вы можете мне помочь. Я пытаюсь импортировать несколько наборов растровых данных в R, перекодировать отсутствующие значения для каждого импортированного растрового файла, связывать их с zipcodes и затем экспортировать каждый растровый файл как файл csv с разными именами. Я пытаюсь использовать цикл, но до сих пор у меня были только ошибки. Это, насколько я получил (DonT смех):импортировать несколько файлов R

импорт всех 24 наборов растровых данных

file_names=as.list(dir(pattern="home.*")) 
listy<-lapply(file_names,raster, band=1) 
names(listy) <- paste0("hour", seq_along(0:23)) 

так что теперь я все наборы растровых данных в виде списка (Listy) и мне просто нужно запустить следующие команды на каждом из них:

например, для элемента 1 Listy

listy$hour1_r<-listy$hour1 
listy$hour1_r[listy$hour1_r==9999]<-NA 
y <- extract(listy$hour1_r, zipcoords) 
hour1_zipcode <- cbind(zipid,y) 
write.table(hour1_zipcode,file="home\\hour1.csv",sep=",",row.names=F) 

Как можно сделать это с помощью петли? Я был бы очень признателен за любые предложения, которые у вас могут быть!

спасибо !!! m

ответ

-1

Не можете ли вы просто сделать это в петле?

for(i in 1:length(listy)) { 

listy[[i]] <- listy[[i]] 
etc 
}  

или lapply

lapply(listy, function(x) { 
    x[[i]] <- x[[i]] 
    etc 
    } 
) 
+0

Обратите внимание, что и 'for' петля неверны и' lapply 'неверны. – nograpes

0

Сделать функцию из ваших команд:

f <- function(listy,filename) { 
    listy$hour1_r<-listy$hour1 
    listy$hour1_r[listy$hour1_r==9999]<-NA 
    y <- extract(listy$hour1_r, zipcoords) 
    hour1_zipcode <- cbind(zipid,y) 
    write.table(hour1_zipcode,file=filename,sep=",",row.names=F) 
} 

Запустите команду на всех элементах:

mapply(f, listy, filename= paste0("home\\hour",seq_along(listy),".csv")) 

Обратите внимание, что вы не действительно хочу mapply вернуть что-нибудь, чтобы вы могли обернуть его в невидимое:

invisible(mapply(f, listy, filename= paste0("home\\hour",seq_along(listy),".csv"))) 

Вы также можете сделать это в цикле:

filenames = paste0("home\\hour",seq_along(list),".csv") 
for (i in seq_along(listy)) f(listy[[i]],filenames[[i]]) 
Смежные вопросы