R语言如何嵌套使用map函数批量生成多模型多数据集混淆矩阵
解决方案
你可以通过purrr的嵌套map语法实现需求,核心逻辑是外层遍历所有数据集,内层遍历所有模型,分别将当前遍历到的模型和数据集传入你写的ConfMat函数即可。
最简写法(purrr公式语法)
library(purrr) conf_mat_list <- map(data_list, ~ map(model_fits, ConfMat, data = .x))
参数对应说明:
- 外层
map遍历data_list的每个元素,用.x指代当前遍历到的数据集,对应你原写法的y参数 - 内层
map遍历model_fits的每个元素,作为第一个参数传入ConfMat,对应你原写法的x参数(即模型对象)
返回结果的列表层级和你输入的列表顺序完全对应:第一层是train/test的结果,第二层是对应数据集下tree/forest/xgb的混淆矩阵。
如果需要按名称快速提取结果,可以先给两个列表命名后再计算:
# 给列表元素增加命名 names(data_list) <- c("train", "test") names(model_fits) <- c("tree", "forest", "xgb") conf_mat_list <- map(data_list, ~ map(model_fits, ConfMat, data = .x)) # 示例:直接提取测试集下XGBoost的混淆矩阵 conf_mat_list$test$xgb
等价显式匿名函数写法(可读性更高)
如果对purrr的公式语法不熟悉,可以用常规匿名函数写法,逻辑完全一致:
conf_mat_list <- map(data_list, function(current_data) { map(model_fits, function(current_model) { ConfMat(df = current_model, data = current_data) }) })
内容的提问来源于stack exchange,提问作者MariusJ
相关产品推荐
相关产品推荐

