2017-06-28 12 views
2

定期的に更新されるディレクトリからデータを取得するRスクリプトで、データ取り込みプロセスを自動化しようとしています。ディレクトリ内のファイルからオブジェクトを自動的に作成する

一般的なフレームワークは、このプロセス

library(sp) 
library(rgdal) 
library(raster) 

f1.t1.cir <- stack("../raster/field1/f1_cir_t1.tif") 
f1.t1.NDVI <- stack("../raster/field1/f1_ndvi_t1.tif") 
f1.t1.RGB <- stack("../raster/field1/f1_ndvi_t1.tif") 

f1.dat <- c(f1.t1.cir, f1.t1.NDVI, f1.t1.RGB) 

for (i in f1.dat){ 
    plotRGB(i) 
} 

を次の私は、私は新しいTIFFファイルf1_cir_t2.tifを追加するとき、Rスクリプトがオブジェクトf1.cir.t2を作成することを直接そのようなディレクトリから各f1.t1.cir型オブジェクトを生成したいと思います。私はこの時点で

a <- list.files(path= "../raster/field1", pattern = "\\.tif$") 
b <- gsub("_", "\\.", a) 

for (i in a) { 
    assign(get(b[(which(a==i))]), stack((paste("../raster/field1/", i,sep="")))) 
} 

のようなものを使用しようとしています

、私はRのワークスペースで積み重ねられたマルチバンドラスタオブジェクトとしてすべてのTIFFファイルを持っているでしょう。

私は、これは、get()問題、または何か他のものであるならば、私は把握することはできません、

Error in get(b[(which(a == i))]) : object 'f1_t1_DSM.tif' not found

を、次のエラーを取得しています。参照

> a 
[1] "f1_t1_DSM.tif" "f1_t1_NDVI.tif" 

> b 
[1] "f1.t1.DSM.tif" "f1.t1.NDVI.tif" 

ため

多くが働いているように、私は思います。

提案がありますか?

+0

'assign'と' get'を忘れました。 1つのリストオブジェクトを作成し、その1つのリストにcir、NDVI、およびRGBオブジェクトを配置します。リストは_nameにすることができるので、それぞれをプログラムで参照することができます。仕事場に無意識にダンプするよりもはるかに優れています。 – joran

+0

@joran、これは素晴らしい方法のように聞こえる...あなたは例を挙げることができますか?フォルダの内容に基づいてオブジェクトのリストを作成するにはどうすればよいですか? -thx – c0ba1t

答えて

1

@joran、偉大な提案が...

f1.t1<-list() 

for(i in list.files(path= "../raster/field1", pattern = "\\.tif$")){ 
    f1.t1[[i]]<-stack((paste("../raster/field1/", i, sep=""))) 
} 

は、非常によく名前を変更する必要が働きました。

ありがとうございます。

+2

このコード全体は2つのはるかに単純な行で書くことができます: 'files = list.files( '../ raster/field1'、pattern = '\\。tif $'); f1.t1 = lapply(paste0( '../ raster/field1 /'、files)、スタック) ' –

関連する問題