4

過去2年間、1年の各月のグリッド内の14ノードの3セットの電力価格(オンピーク、オフピーク、および日平均)を計算して保存するオブジェクトを作成する必要があります。埋め込みリストのデータ構造が適切だと思いました(これが最適でない場合は修正してください)。

いずれにせよ、私はforループを使用してこの構造を作成するのが好きではありません。これを行うためのエレガントな方法があれば、誰かが私を正しい方向に導くのを手伝ってくれるとありがたいです。私は自分のコーディングを練習して改善しようとしています。ありがとうございました。

hb_lz_names <- c("HB_BUSAVG", "HB_HOUSTON", "HB_HUBAVG", "HB_NORTH", "HB_SOUTH", 
"HB_WEST", "LZ_AEN", "LZ_CPS", "LZ_HOUSTON", "LZ_LCRA", "LZ_NORTH", 
"LZ_RAYBN", "LZ_SOUTH", "LZ_WEST")

power_price <- list()
for (i in 1:2){
  power_price[[i]] <- list()
  for (j in 1:12){
    power_price[[i]][[j]] <- list()
    for (k in 1:NROW(hb_lz_names)) {
      power_price[[i]][[j]][[k]] <- list()
      for (l in 1:3){
        power_price[[i]][[j]][[k]][[l]] <- l
      }
      names(power_price[[i]][[j]][[k]]) <- c("on-peak", "off-peak", "average")
    }
    names(power_price[[i]][[j]]) <- hb_lz_names
  }
  names(power_price[[i]]) <- c("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug",
                             "sep", "oct", "nov", "dec")
}
names(power_price) <- c("2011", "2012")
4

1 に答える 1

5

このような通常の(不規則ではない)データセットの場合、配列を使用する方がはるかに良いと思います。

period_names <- c("on-peak", "off-peak", "average")
hb_lz_names <- c("HB_BUSAVG", "HB_HOUSTON", "HB_HUBAVG", "HB_NORTH", "HB_SOUTH", 
"HB_WEST", "LZ_AEN", "LZ_CPS", "LZ_HOUSTON", "LZ_LCRA", "LZ_NORTH", 
"LZ_RAYBN", "LZ_SOUTH", "LZ_WEST")
yrs <- 2011:2012

power.price <- array(1,dim=c(2,12,length(hb_lz_names),length(period_names)))
dimnames(power.price) <- list(year=yrs,month=month.abb,node=hb_lz_names,
                              period=period_names)

(リスト内の要素に名前dimnamesを付けること、つまり次元に名前を付けることは、配列構造を覚えておくのに非常に役立ちます...)

次に、を使用して適切なマージン全体の平均(またはその他の要約統計量)を簡単に計算しapply、...を使用して長い形式(ggplotグラフィックスまたは統計分析用)に変換できreshape2::meltます。私の経験では、深くネストされたリストは苦痛です。

于 2012-08-02T02:25:43.567 に答える