R语言如何对which.max定位到的嵌套列表元素应用任意函数
嵌套列表定位最大值对应元素并批量应用自定义函数实现方案
- 先保存你计算得到的最大值位置索引
# 存储每个顶层元素对应的最大值子列表位置 max_pos <- apply(dailymax, 1, which.max)
- 封装通用批量处理工具函数,支持传入任意自定义函数及额外参数
# 参数说明: # raw_data: 原始嵌套列表数据 # pos_vec: which.max得到的位置向量 # fun: 要应用的任意自定义函数 # ...: 给自定义函数传递的额外参数 process_max_ele <- function(raw_data, pos_vec, fun, ...) { mapply(function(top_ele, pos) { fun(top_ele[[pos]], ...) }, raw_data[names(pos_vec)], pos_vec, SIMPLIFY = FALSE) }
- 使用示例
下面用不同的自定义函数演示调用效果:
- 示例1:计算对应子元素value列的平均值
# 自定义求均值函数 cal_mean_val <- function(df) { mean(df$value, na.rm = TRUE) } # 批量调用 result_mean <- process_max_ele(data, max_pos, cal_mean_val)
输出结果:
$Apr [1] 34.45 $Dec [1] 4.666667
- 示例2:筛选对应子元素中value大于10的记录
# 自定义筛选函数,支持传入阈值参数 filter_value <- function(df, threshold = 10) { df[df$value > threshold, ] } # 调用时传入自定义阈值 result_filter <- process_max_ele(data, max_pos, filter_value, threshold = 10)
输出结果:
$Apr date value 458 04-02-2037 82.47 $Dec date value 1433 12-03-2039 11
- 示例3:修改对应子元素的value列数值
# 自定义数值更新函数 update_value <- function(df, multiply = 2) { df$value <- df$value * multiply return(df) } # 调用后得到更新后的目标子元素列表 result_updated <- process_max_ele(data, max_pos, update_value, multiply = 2)
如果你需要直接修改原始嵌套列表中的对应元素,额外加一步赋值即可:
for (top_name in names(max_pos)) { data[[top_name]][[max_pos[top_name]]] <- update_value(data[[top_name]][[max_pos[top_name]]]) }
内容的提问来源于stack exchange,提问作者Hüsamettin Tayşi
相关产品推荐
相关产品推荐

