2015-11-23 2 views
1

У меня 500 файлов tif (, , ind_moist3.tif ...... ind_moist500.tif) в моем рабочем каталоге. Я хочу прочитать каждый из них. Вот что я сделал:R чтение нескольких растровых файлов дает ошибку для цикла

library(raster) 
for (i in 1:500){ 
moist[i]<-raster(paste0("R:/....moist_tif/ind_moist",i,".tif")) 
} 

Я получаю ошибку говоря object moist not found. Может ли кто-нибудь сказать мне, что я делаю неправильно.

+0

Попробуйте 'растр (« R: ........ wet_tif/wet », i,". Tif ", sep =" "))' –

+0

thank вы. Но он все еще говорит, что влажный объект не найден. Я отредактировал вопрос, чтобы отразить это. – KS89

+1

Перед началом цикла попробуйте: 'wet <- rep (NA, 500)' –

ответ

0

Определение moist быть список перед циклом:

moist <- list() 

И внутри цикла добавления элементов с помощью

moist[paste0("moist",i)] <- raster... 

Затем вы можете получить доступ к ним через moist$moist1, moist$moist2, ... или использования attach(moist) для получения доступа непосредственно через moist1, moist2, ...

UPDATE: Подобрав комментарий Конрада вы можете сделать

i <- 1:500 
listMoist <- lapply(i, FUN = function(x) { raster(paste0("R:/....moist_tif/ind_moist",x,".tif")) }) 
names(listMoist) <- paste0("moist",i) 

Используйте attach(listMoist) снова получить доступ ко отдельным элементам списка по их именам. Не уверен, насколько это быстрее. Попробуйте и сообщите об этом;)

+0

Не вырабатывайте списки в цикле, это неэффективно - и совершенно ненужно: просто сделайте 'lapply' , –

Смежные вопросы