如何简洁地使用多输出函数(如range)聚合stars对象?
用多输出函数聚合stars对象的解决方法
问题原因
aggregate.stars 默认要求聚合函数返回单个值,而 range() 会返回两个值(最小值和最大值),导致输出元素总数翻倍,与原对象的空间维度乘积不匹配,从而触发维度错误。
简洁解决方法
只需让聚合函数返回带维度的结构(如矩阵、命名向量),让 stars 识别为新增一个维度来存储多输出结果:
方法1:返回命名向量(推荐,维度标签更直观)
x_agg_time3 = aggregate(x, by = '2 days', FUN = \(x) c(min_val = min(x), max_val = max(x)))
执行后,结果会新增一个名为 values 的维度,标签为 min_val 和 max_val,可通过维度名提取对应结果:
# 提取最小值聚合结果 x_agg_time3[,,,min_val] # 提取最大值聚合结果 x_agg_time3[,,,max_val]
方法2:返回转置矩阵
x_agg_time3 = aggregate(x, by = '2 days', FUN = \(x) t(range(x)))
range(x) 的结果被转置为1行2列的矩阵,stars 会自动新增一个长度为2的维度,可通过索引提取:
# 提取最小值(第1个位置) x_agg_time3[,,,1] # 提取最大值(第2个位置) x_agg_time3[,,,2]
验证结果
查看处理后对象的维度,确认新增了存储多输出的维度:
dim(x_agg_time3)
内容的提问来源于stack exchange,提问作者Patrick Brown
相关产品推荐
相关产品推荐

