保存R中for循环产生的对象

时间:2018-12-13 02:02:41

标签: r loops raster savechanges robjects

我正在尝试保存循环产生的不同对象。我正在使用raster函数在不同目录中充电多个图像,循环生成了这些对象:

b :它将生成我存放图像的不同目录

  

[1]“ C:/ Users / franc / Documents / Fran / Tesis / Sin sincronizar / Imagenes   Landsat / 1985 / Invierno / band3.tif”

     

[1]“ C:/ Users / franc / Documents / Fran / Tesis / Sin sincronizar / Imagenes   Landsat / 1986 / Invierno / band3.tif”

     

[1]“ C:/ Users / franc / Documents / Fran / Tesis / Sin sincronizar / Imagenes Landsat / 2004 / Invierno / band3.tif”

名称:我要用于保存输出的其他名称

  

[1]“ 1985Banda3”

     

[1]“ 1986Banda3”

     

[1]“ 2004Banda3”

然后,我要使用目录 b 来给图像充电,并将每个图像保存在 name

的每个值中

这是我的代码:

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 <-raster(“ C:/ Users / franc / Documents / Fran / Tesis / Sin   sincronizar / Imagenes Landsat / 1985 / Invierno / band3.tif“)

     

1986Banda3 <-raster(“ C:/ Users / franc / Documents / Fran / Tesis / Sin   sincronizar / Imagenes Landsat / 1986 / Invierno / band3.tif“)

     

2004Banda3 <-raster(“ C:/ Users / franc / Documents / Fran / Tesis / Sin   sincronizar / Imagenes Landsat / 2004 / Invierno / band3.tif“)

1 个答案:

答案 0 :(得分:2)

如果您确实想要单独的变量,则可以使用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_2004name <- 'Bandar_2004'; Banda[['name']]

不仅您的工作区更整洁,而且更轻松地对对象执行操作:

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

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

由于文件中的内容,我对名称进行了一些更改

  

标识符由字母,数字,句点('。')和下划线组成。它们不能以数字或下划线开头,也不能以句号后跟数字开头。

您可以规避它(并且assign与其他名称兼容),但这意味着您必须在名称周围使用反引号(“`”)来引用它。