2016-07-26 17 views
0

私は、私が働いているループ関数を手伝ってくれる人がいたらと思っていました。私はGoogleとStack Overflowを広範囲に検索しようとしましたが、正確な検索用語がわからないので、私はいくつかの結果を見逃してしまうのではないかと心配しています。そのことを念頭に置いて、私はこの質問が既に尋ねられている場合は事前にお詫びしますが、誰かが私に解決策の正しい方向を教えてくれることを願っています。マイデータバッチ内のループのインクリメント

について

私はNASAs MODIS衛星からのファイルの1000をダウンロードしました。私の研究領域は広い領域をカバーしているため、6タイルの領域にデータをダウンロードしなければなりませんでした。その結果、ダウンロードしたファイルのリストは実際には6つのグループにまとめられています(エクスプローラ内のファイルのリストとして表示されていますが)。

私はいくつかの初期処理を行うためにいくつかの単純なforループを書いています(以下の例では、タイルを再サンプリングして、raster :: mosaicを使って一緒に縫い合わせることができます)個別に、この段階で、私は私のニーズに完璧にするために、次のループを発見した:

resampled.raster<-list() 

for (l in 1:24){ 
    cat(l,"\n") 
    resampled.raster[[l]]<-resample(rst[[l]], s, method="ngb") 
} 

問題

を私の処理の次の段階は、6のグループにラスタをモザイクするために私を必要とし、 6の次のバッチに移動する前に。たとえば、私が24個のファイルのリストでは、最初の6個はファイルの集合として処理し、次にリストに保存してから次の6個に移動する必要があります。これを4回繰り返した後(合計24個のファイルを作成する)、ループを停止します。

私がインターネットを検索して見つけた最も近い解決策はhereですが、これは私の問題の解決策ではありません。

R内でforループを使用すると、この 'バッチ'処理が可能ですか?事前に多くのお手伝いをありがとうございます。

+1

私は決して 'raster'を使ったことはありませんが、バッチを選択するには' for(i in seq(1,24、step)) 'で' step < - 6'を実行し、次に 'batchIndex < - i:(i + step) ' – Marcel10

+0

ファイル名のリストをバッチでグループ化した.txtファイルを作成することができます – Adam

+0

両方のコメントをありがとうございます。下のRobertHの解決策が働いており、私はこの答えを受け入れました。 – Simon

答えて

0

最初に、resamplemosaicを使用することはほぼ間違っていることに注意してください。これらがタイルの場合は、mergeをマージする必要があります。

グループ化する必要があるファイルの名前には、何かユニークなものがありますか?それがあなたが使用する必要があるものです。

グループ

for (u in uc) { 
    files <- ff[u == code] 
    r <- lapply(files, raster) 
    r$filename <- paste0("merged/", u, ".tif") 
    m <- do.call(merge, r) 
} 
以上のユニークなグループ

code <- gsub('file', '', ff) 
code <- substr(code, 1, 1) 
uc <- unique(code) 

ループを取得ここで、ファイル名

# ff <- list.files() 

のベクトルおもちゃの例

ff <- c('fileA1', 'fileA2', 'fileB1', 'fileB2') 

を取得

+0

こんにちはロバート、ご協力いただきありがとうございます。これは本当にエレガントなソリューションであり、完璧に機能しています。私はまだプログラミングに慣れていないので、このような詳細な答えが実際に何が起こっているのか理解する助けになりました。あなたの時間をもう一度ありがとう。 – Simon

+0

今後誰かがこの情報を参考にしてくれる場合は、追加情報があります。 RobertHが尋ねるように、ファイル名に固有の何かがあります。各ファイルの名前は、次のようになります。 MOD15A2.A2016169.h09v07.005.2016183085001 上記のRobertのコードを使用して、「MOD15A2」を削除しました。ファイル名の次の8文字を一意の識別子として使用します(この場合はA22016169です)。 私のデータが世界中の6タイルに及ぶため、それぞれがA2016169を含む6つのファイルがあります。これらは、マージされた6つのファイルです。 – Simon

関連する問題