R中对列表元素两两配对应用对称二元运算符的通用实现方法
R语言列表元素对称二元运算无冗余实现方案
通用实现
使用R内置combn()函数生成所有不重复的两两组合,仅计算一次每对对称配对结果,无冗余计算,支持任意输入类型和自定义二元运算符:
# lst:输入列表 # f:自定义对称二元运算函数 # ...:透传给f的额外参数 # include_diag:是否包含元素与自身配对的结果(即m=n的情况) pairwise_apply <- function(lst, f, ..., include_diag = FALSE) { if (include_diag) { diag_res <- lapply(lst, function(x) f(x, x, ...)) pair_res <- combn(length(lst), 2, function(idx) f(lst[[idx[1]]], lst[[idx[2]]], ...), simplify = FALSE) return(c(diag_res, pair_res)) } # 默认仅计算m<n的配对,返回列表格式结果 combn(length(lst), 2, function(idx) f(lst[[idx[1]]], lst[[idx[2]]], ...), simplify = FALSE) }
使用示例
加法测试场景
A <- list(1,2,3) # 调用内置加法运算符 pairwise_apply(A, `+`) # 返回结果:list(3,4,5),完全匹配预期
集合运算场景
# 构造输入数据 list_of_sets <- list( numeric(0), 1, 2, c(1,2), 3, c(1,3), c(2,3), c(1,2,3) ) set_3 <- c(1,2) # 调用自定义集合运算函数 res <- pairwise_apply(list_of_sets, function(set_1, set_2) { setequal(intersect(set_1, set_2), set_3) }) # res为长度28的列表,对应8个元素的所有两两配对计算结果,无冗余
内容的提问来源于stack exchange,提问作者monotonic
相关产品推荐
相关产品推荐

