purrr - 如何递归地应用一个参数不断变化的函数

问题描述 投票:0回答:0

理想情况下,我想利用 purrr 的累积功能或类似功能。

假设我想迭代地使用 base::combn 函数,并获得所有中间结果(最好放在列表列表中)。

在下面的示例中,最初,参数 x = 4,因此 m 也将是 4(但 (x, m) 可能是 (5,5) (6,6)...)。然后,在第一个循环之后,x 将是之前的结果,而 m 下降一个,迭代直到 m = 2.

n1 <- combn(x = 4, m = 4, simplify = FALSE) 
n2 <- map(n1, ~ combn(.x, 3, simplify = FALSE)) 
n3 <- map(n2, ~ map(., ~ combn(.x, 2, simplify = FALSE)))

> n1
[[1]]
[1] 1 2 3 4


> n2
[[1]]
[[1]][[1]]
[1] 1 2 3

[[1]][[2]]
[1] 1 2 4

[[1]][[3]]
[1] 1 3 4

[[1]][[4]]
[1] 2 3 4

> n3
[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
[1] 1 2

[[1]][[1]][[2]]
[1] 1 3

[[1]][[1]][[3]]
[1] 2 3


[[1]][[2]]
[[1]][[2]][[1]]
[1] 1 2

[[1]][[2]][[2]]
[1] 1 4

[[1]][[2]][[3]]
[1] 2 4


[[1]][[3]]
[[1]][[3]][[1]]
[1] 1 3

[[1]][[3]][[2]]
[1] 1 4

[[1]][[3]][[3]]
[1] 3 4


[[1]][[4]]
[[1]][[4]][[1]]
[1] 2 3

[[1]][[4]][[2]]
[1] 2 4

[[1]][[4]][[3]]
[1] 3 4

如你所想,我想获得所有可能的组合,例如:选择(4,4)->选择(结果,3)->选择(结果,2)。

任何帮助或想法将不胜感激。

r purrr accumulate combn
© www.soinside.com 2019 - 2024. All rights reserved.