Сохранить объекты, полученные из цикла for в R - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь сохранить различные объекты в результате цикла.Я использую функцию raster для зарядки нескольких изображений в разных каталогах, цикл генерирует эти объекты:

b : он генерирует разные каталоги, в которых у меня есть мои изображения

[1] "C: / Users / frank / Documents / Fran / Tesis / Sin sincronizar / Imagenes Landsat / 1985 / Invierno / band3.tif"

[1] "C: / Users/ franc / Документы / Fran / Tesis / Sin sincronizar / Imagenes Landsat / 1986 / Invierno / band3.tif "

[1]" C: / Пользователи / frank / Documents / Fran / Tesis / Sin sincronizar / ImagenesLandsat / 2004 / Invierno / band3.tif "

name : различные имена, которые я хочу использовать для сохранения результатов

[1] "1985Banda3"

[1] "1986Banda3"

[1] "2004Banda3"

Тогда я хочу использовать каталог b для зарядки изображений и сохранения каждого в каждом значении имя

Вот мой код:

library(raster)
a<-c(1985,1986,2004)
i<-1

while(i<=(length(a)))
{
  b<-paste("C:/Users/franc/Documents/Fran/Tesis/Sin sincronizar/Imagenes Landsat/",a[[i]],
       "/Invierno/band3.tif", sep = '')
  name<-(paste(a[[i]],"Banda3", sep =''))
  name<- raster(b)
  i<-i+1

}

Я хочу сгенерировать это

1985Banda3 <- растр ("C: / Users / franc / Documents / Fran / Tesis / Sin sincronizar / Imagenes Landsat / 1985 / Invierno / band3.tif ") </p>

1986Banda3 <- растр (" C: / Users / franc / Documents / Fran / Tesis / Sin sincronizar ")/ Imagenes Landsat / 1986 / Invierno / band3.tif ") </p>

2004Banda3 <- растр (" C: / Users / frank / Documents / Fran / Tesis / Sin sincronizar / Imagenes Landsat / 2004 / Invierno / band3. "TIF ") </p>

1 Ответ

0 голосов
/ 13 декабря 2018

Если вам действительно нужны отдельные переменные, вы можете использовать assign, что дает вам полный вызов assign(name, raster(b)).

Однако я сомневаюсь, действительно ли полезно иметь разные переменные для многих объектов, которые выхочу обрабатывать таким же образом (я предполагаю, что ваши реальные данные имеют более 3 элементов).Потому что на следующем шаге вы хотите что-то с ними сделать, и вам снова нужны эти имена ...

По моему опыту, работать со (именованным) списком намного проще, что вы можете получить таким образом:

library(raster)
a<-c(1985,1986,2004)

Bandas <- lapply(a, function(name) {
    b <- paste("C:/Users/franc/Documents/Fran/Tesis/Sin sincronizar/Imagenes Landsat/",name)
    raster(b)
})
names(Bandas) <- paste("Banda3_", a, sep ='')

Теперь у вас есть список, называемый Bandas, с 3 именованными элементами.
Для доступа, например, к 2004 году, вы можете использовать Bandas$Banda3_2004 или name <- 'Bandar_2004'; Banda[['name']]

Но у вас есть не только чистое рабочее пространство, но и с вашими объектами проще:

ModifiedBandas <- lapply(Bandas, function(ban) {
    _do something with an individual file_
})

for (ban in Bandas) {
   print(ban)
}

И я немного изменил имена, потому что из документации:

Идентификаторы состоят из последовательности букв, цифр, точки ('.') И подчеркивания.Они не должны начинаться с цифры или знака подчеркивания или с точки, за которой следует цифра.

Вы можете обойти это (и assign соответствует другим именам), но это означает, что вы должныиспользуйте кавычки ("` ") вокруг имени, чтобы обратиться к нему.

...