我必须把列表中的所有元素互相比较,狗对cat ,狗对老鼠,cat 对老鼠.

animals <- list(
  dog = data.frame(
    col_1 = sample(c(100:200), size = 10, replace = TRUE),
    col_2 = sample(c(100:200), size = 10, replace = TRUE),
    col_3 = sample(c(100:200), size = 10, replace = TRUE),
    col_4 = sample(c(100:200), size = 10, replace = TRUE)
  ),
  cat = data.frame(
    col_1 = sample(c(100:200), size = 10, replace = TRUE),
    col_2 = sample(c(100:200), size = 10, replace = TRUE),
    col_3 = sample(c(100:200), size = 10, replace = TRUE),
    col_4 = sample(c(100:200), size = 10, replace = TRUE)
  ),
  mouse = data.frame(
    col_1 = sample(c(100:200), size = 10, replace = TRUE),
    col_2 = sample(c(100:200), size = 10, replace = TRUE),
    col_3 = sample(c(100:200), size = 10, replace = TRUE),
    col_4 = sample(c(100:200), size = 10, replace = TRUE)
   )
)

我想比较一下上面两个字的每一个组合.比较的类型并不重要——只要这样说,这可以通过generic_function()来完成:

generic_function(animals$dog[, c("col_1", "col_2")],
                 animals$cat[, c("col_1", "col_2")])

由于有很多数据要比较,我想使用lapply函数,但我不知道如何创建列表的各个级别之间的交集.你能帮我吗?

推荐答案

您可以使用combn()生成组合,然后使用lapply()迭代组合:

animals <- list(
  dog = data.frame(
    col_1 = sample(c(100:200), size = 10, replace = TRUE),
    col_2 = sample(c(100:200), size = 10, replace = TRUE),
    col_3 = sample(c(100:200), size = 10, replace = TRUE),
    col_4 = sample(c(100:200), size = 10, replace = TRUE)
  ),
  cat = data.frame(
    col_1 = sample(c(100:200), size = 10, replace = TRUE),
    col_2 = sample(c(100:200), size = 10, replace = TRUE),
    col_3 = sample(c(100:200), size = 10, replace = TRUE),
    col_4 = sample(c(100:200), size = 10, replace = TRUE)
  ),
  mouse = data.frame(
    col_1 = sample(c(100:200), size = 10, replace = TRUE),
    col_2 = sample(c(100:200), size = 10, replace = TRUE),
    col_3 = sample(c(100:200), size = 10, replace = TRUE),
    col_4 = sample(c(100:200), size = 10, replace = TRUE)
  )
)


combinations <- asplit(combn(names(animals), 2), 2)

print(combinations)
#> [[1]]
#> [1] "dog" "cat"
#> 
#> [[2]]
#> [1] "dog"   "mouse"
#> 
#> [[3]]
#> [1] "cat"   "mouse"

lapply(combinations, function(x) {
  generic_function(
    animals[[x[1]]][, c("col_1", "col_2")],
    animals[[x[2]]][, c("col_1", "col_2")]
  )
})

创建于2024-03-14年第reprex v2.1.0

R相关问答推荐

给定R中另一行中的值,如何插补缺失值

使用rlang s arg_match判断函数输入列表

无法在我的情节中表现出显着的差异

计算R中的威布尔分布的EDF

R Markdown中的交叉引用表

任意列的欧几里得距离

如何从当前行上方找到符合特定条件的最接近值?

如果第一个列表中的元素等于第二个列表的元素,则替换为第三个列表的元素

计算时间段的ECDF(R)

使用data.table::fcase()而不是dplyr::case_When()时保持值

如何将Which()函数用于管道%>;%

在使用具有Bray-Curtis相似性的pvCluust时计算p值

将工作目录子文件夹中的文件批量重命名为顺序

按组内中位数分类

将多个列合并为一个列的有效方法是什么?

计算Mean by分组和绑定到R中的数据集

如何移动点以使它们的打印不重叠

抽样变换-REXP与RWEIBUR

如何使用循环从R中的聚合函数创建列,而不会在名称中给出&q;$&q;?

隐藏基于 case 总数的值