我需要创建一个对象来计算和存储过去两年一年中每个月的网格中 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")
最佳答案
我认为对于像这样的常规(非参差不齐)数据集,您将是 多最好使用数组:
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
图形或统计分析) ...根据我的经验,深度嵌套的列表很麻烦。
关于r - 在不使用 'for' 构造的情况下创建列表列表的任何更简洁/优雅的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11770175/