【发布时间】:2021-09-20 11:34:27
【问题描述】:
具有可重现示例的数据
我有以下列表
library(arrangements)
a <- list(
arrangements::combinations(x = 5, k = 5),
arrangements::combinations(x = 5, k = 4),
arrangements::combinations(x = 4, k = 4))
看起来像这样:
[[1]]
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[[2]]
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 1 2 3 5
[3,] 1 2 4 5
[4,] 1 3 4 5
[5,] 2 3 4 5
[[3]]
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
我需要什么
我想在列表a(即[[1]], [[2]], [[3]])的每个元素的每一行上使用一些函数,以便输出如下所示:
[[1]]
"F1 =~ 1 + 2 + 3 + 4 +5"
[[2]]
"F2 =~ 1 + 2 + 3 + 4"
"F3 =~ 1 + 2 + 3 + 5"
"F4 =~ 1 + 2 + 4 + 5"
"F5 =~ 1 + 3 + 4 + 5"
"F6 =~ 2 + 3 + 4 + 5"
[[3]]
"F7 =~ 2 + 3 + 4 + 5"
到目前为止我已经做了什么以及我被困在哪里
我已经设法为列表的各个元素生成了我需要的输出。例如,下面的 for 循环会产生我需要的输出,但仅适用于列表 a 的第二个元素。
z <- list(
arrangements::combinations(x = 5, k = 4))
qq <- vector(mode = "character", length = 0L)
for(i in 1:5) {
qq[i] <- paste0("F", i+1, sep = " =~ ", paste(z[[1]][i, ], collapse=" + "))
}
qq
[1] "F2 =~ 1 + 2 + 3 + 4" "F3 =~ 1 + 2 + 3 + 5" "F4 =~ 1 + 2 + 4 + 5" "F5 =~ 1 + 3 + 4 + 5"
[5] "F6 =~ 2 + 3 + 4 + 5"
我无法为整个列表编写 for 循环,因为列表的每个元素都有不同的维度,并且我收到下标超出范围的错误。此外,我无法处理列表 a 的各个元素,因为它是一个示例,并且列表可能要大得多,所以我需要一种方法来自动化它。
我怀疑这可以通过结合lapply 和apply 来完成,但我只是不知道如何使它工作。例如,这里 lapply 和 apply 一起工作,但我就是不知道如何让它们输出我需要的东西。
lapply(a, function(x) apply(a[[2]], 1, paste, collapse=""))
提前谢谢你
【问题讨论】: