在R中如何将列表层级对应月份天数并对列表内数据执行算术运算
最优实现方案
你生成的列表l的索引刚好和月份1~12一一对应(l[[1]]对应1月,l[[12]]对应12月),完全不需要额外用which做匹配,直接按索引取值计算即可,运算效率最高:
# 直接使用预定义的有序ndays向量计算,无需调用mthdays数据框 l_updated <- lapply(seq_along(l), function(x) { # 对应月份的天数直接按索引取ndays l[[x]]$Data <- l[[x]]$Data * ndays[x] return(l[[x]]) })
如果你需要严格通过mthdays数据框匹配(比如后续列表顺序可能和月份不对应的场景),可以用匹配的写法:
# 基于mthdays匹配的通用写法 l_updated <- lapply(seq_along(l), function(x) { target_days <- mthdays$ndays[mthdays$mth == x] l[[x]]$Data <- l[[x]]$Data * target_days return(l[[x]]) })
注意事项
R中数组与标量的乘法是自动按元素广播的,你的Data字段是array类型,直接乘以天数标量不需要额外调整维度,运算逻辑和你需求完全一致。
内容的提问来源于stack exchange,提问作者matlabcat
相关产品推荐
相关产品推荐

