【问题标题】:any cleaner/elegant way to create lists of lists without using 'for' construct?任何更简洁/优雅的方式来创建列表列表而不使用“for”构造?
【发布时间】:2012-07-30 23:51:40
【问题描述】:

我需要创建一个对象来计算和存储过去两年中一年中每个月网格中 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")

【问题讨论】:

  • expand.grid怎么样?

标签: r list for-loop


【解决方案1】:

我认为对于像这样的常规(不参差不齐)数据集,使用数组会很多更好:

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 轻松计算适当边距的平均值(或其他汇总统计数据),并使用reshape2::melt 转换为长格式(用于ggplot 图形或统计分析)...根据我的经验,深度嵌套的列表让人头疼。

【讨论】:

  • 非常感谢您的指导。我实际上将使用 ggplot 并将进行一些统计分析,所以这是很好的信息。也感谢@mnel 的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 2023-04-09
  • 2020-06-15
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多