如何用R的purrr/base函数实现列表元素批量运算生成嵌套列表
解决R语言列表元素批量多运算的嵌套列表生成问题
首先定义原始列表:
lst <- list(a = 1:3, b = 4:5, c = 6:8)
我们需要对每个子列表的所有元素分别执行加1、加2、加3操作,生成嵌套结构的结果,以下提供两种无显式for循环的实现方法:
方法一:使用tidyverse的purrr包
借助嵌套的map()函数,先遍历原列表的每个子列表,再遍历每个要执行的加法增量:
library(purrr) # 定义带命名的增量向量,让输出结构更清晰 add_values <- c(add1 = 1, add2 = 2, add3 = 3) # 嵌套映射生成结果 result_purrr <- map(lst, ~ map(add_values, function(x) .x + x))
输出结构示例:
> str(result_purrr) List of 3 $ a:List of 3 ..$ add1: int [1:3] 2 3 4 ..$ add2: int [1:3] 3 4 5 ..$ add3: int [1:3] 4 5 6 $ b:List of 3 ..$ add1: int [1:2] 5 6 ..$ add2: int [1:2] 6 7 ..$ add3: int [1:2] 7 8 $ c:List of 3 ..$ add1: int [1:3] 7 8 9 ..$ add2: int [1:3] 8 9 10 ..$ add3: int [1:3] 9 10 11
方法二:使用base R的lapply函数
用嵌套的lapply()实现相同逻辑,无需额外安装包:
# 定义带命名的增量向量 add_values <- c(add1 = 1, add2 = 2, add3 = 3) # 嵌套遍历生成结果 result_base <- lapply(lst, function(sub_list) { lapply(add_values, function(x) sub_list + x) })
result_base的结构与result_purrr完全一致,满足需求的嵌套层级:外层保留原列表的a/b/c命名,每个子项内包含add1/add2/add3三个子列表,对应每个元素执行加法后的结果。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

