如何循环 R 中长度为 n 的列表的长度为 k 的子集?

How to loop over subsets of length k of a list of length n in R?

我得到了两个数字 nk 以及 0 < k < n。 如何遍历所有可能的长度为 k 的子集组合?

例如我有 x <- 1:10。 那我想做

for (y in c(c(1,2,3), c(1,2,4), c(1,2,5), ..., c(8, 9, 10))){
   ...
}

您可以使用 combn 获取所有子集的数组,然后使用 asplit 将其转换为列表。只需遍历此列表即可。

例如,下面的代码将打印出 x 的所有长度为 3 的子集:

x <- 1:10
n <- 10
k <- 3

subsets <- asplit(combn(n, k), 2)

for(i in subsets) {
  print(x[i])
}