2

この質問にはさまざまなバリエーションがあるようですが、ループと名前付けおよび出力ファイル内にある状況に対処しているようには見えません。これがうまくいくと私が思った方法:

for(j in 1:3) {
    for(k in 1:17){
       extract_[j]km <- extract(RasterStack, SpatialPolygonsDataFrame_[j]km, layer=[k], nl=1, df=TRUE)
    }
}

抽出機能はラスターパッケージからのものです。すでに一連のRasterStacksとSpatialPolygonsを作成しましたが、これらをいくつかのパラメーターを持つ関数( "extract")に渡し、そのうちのいくつかをループで操作し、それに応じて出力にラベルを付けます。これはBASHでは簡単ですが、Rでは理解できません。

最終的には文字列も渡したいのですが、別の投稿がその方法を示しているようです。

編集:私は元々、上記の関数を単一のデータフレームとして投稿しましたが、実際には、ラスターパッケージ(最終的にはデータフレーム)から指定されたオブジェクトです。

4

1 に答える 1

4

Justinが指摘しているように、リストでの作業は、多くの名前付き変数でワークスペースを台無しにするよりも、Rの構造に沿ったものです。ワークスペースに次のことを「知る」ためのオブジェクトがたくさんあると、作業がすぐに難しくなります。

あなたのやり方で:

for(j in 1:3) { 
assign(
   paste("extract",j,"km",sep=""), # or paste0 to avoid need for sep=""
   function(
            get(
                paste("data",j,"km",sep="")
               )
           )
      )
}

個人的にはリストでの作業が好きなので、以下ではデータオブジェクトをリストに変換し、そのリストのすべての要素で関数を実行する方法を示します。このように作業すると、通常、文字列を「取得」および「割り当て」の方法で使用する必要がなくなります。

# just converting your variables to a list    
data.list <- mget(grep("data",ls(),value=TRUE),envir=.GlobalEnv) 

# then output results
result.list <- lapply(data.list,your_function) 
于 2012-12-16T00:52:14.070 に答える