1

既存の 2 つのネストされたリスト要素から新しいネストされたリスト要素を作成する方法についてのヒントを探しています。現在取り組んでいるスクリプトの現在の形式では、入力リストの要素数に基づいて n 要素長の tardis というリストを作成します。以下の例では、その入力リスト dataLayers は 2 要素の長さです。

tardis を作成した後、スクリプトは 1200 個の netCDF ファイルからデータを読み取ってデータを取り込みます。tardis の 'mean' と 'sd' の 12 要素のそれぞれは、地理データの行列 tardis[['data']][[decade]][['mean']][[month]] です。たとえば、 12暦月間。リストが完全に入力されたら、いくつかの派生変数を作成したいと思います。たとえば、以下のスニペットでは、SNOW と RAIN を追加して変数 TOTALPRECIP を作成したいと考えています。これを行う際に、SNOW + RAIN から TOTALPRECIP を tardis の 3 番目のリスト要素として作成し、他の 2 つの要素として正確にネストされた構造を作成したいと思います (それらを一緒に追加して構造を維持します)。

これは、適用またはその関連機能で可能ですか?

begin <- 1901
end <- 1991
dataLayers <- c("SNOW","RAIN")
tardis<-list()
for (i in 1:length(dataLayers)){
  tardis[[dataLayers[i]]]<-list('longName'='timeLord','units'='theDr','data'=list())
  for (j in seq(begin,end,10)){
    tardis[[dataLayers[[i]]]][['data']][[as.character(j)]]<-list('mean'=vector(mode='list',length=12),'sd'=vector(mode='list',length=12))
   }
 }

#add SNOW AND RAIN

print(names(tardis))

>[1] "SNOW" "RAIN" "TOTALPRECIP"
4

1 に答える 1

0

これが使用するforループです(それぞれの値は、ループの代入部分にある式と同じであるreplicate ことに注意してください)expressionreplicatefor

## This is your inner for-loop, using replicate
inds <- seq(begin, end, 10)
datas <- replicate(length(inds), list('mean'=vector(mode='list',length=12),'sd'=vector(mode='list',length=12))
                    , simplify=FALSE)
names(datas) <- inds

# This is your outer loop
tardis2 <- replicate(length(dataLayers), list('longName'='timeLord','units'='theDr','data'=datas)
                    , simplify=FALSE)
names(tardis2) <- dataLayers

# Compare Results
identical(tardis2, tardis)
# [1] TRUE


ただし、lists がこれに最適な構造であるかどうかはわかりません。を考慮しましたdata.frameか?

于 2013-08-06T15:51:04.940 に答える