【问题标题】:How do I find all possible subsets of a set iteratively in R?如何在 R 中迭代地找到集合的所有可能子集?
【发布时间】:2013-07-11 13:14:29
【问题描述】:

所以我知道以下命令会将所需长度 y 的所有可能组合存储在一个列表中,其中y < j

 lapply(y, function(x) combn(j,x))

但我不希望将它们全部存储在列表中,因为稍后我将只访问它们一次,因此将它们存储在内存中效率不高。有没有一种方法可以让我在某种循环或其他东西中生成每个组合,然后在我完成计算之后,它只会给我下一个组合?所以基本上我想迭代地产生组合而不是先存储它们。

所以在伪代码中,我想要的是:

#loop that will generate each possible combination one by one
loop{
  operation that uses combination
}

【问题讨论】:

  • 提供更多代码来显示您想要实现的之前和之后的部分,您可能会得到一个好的答案(无论如何您可能会得到一个好的答案,但它肯定会有所帮助)。请参阅how to make a great reproducible example 了解更多信息。

标签: r loops combinations iteration


【解决方案1】:

不需要循环(lapply 或其他):

combn(1:4,2)
#      [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]    1    1    1    2    2    3
# [2,]    2    3    4    3    4    4

计算组合总和的示例:

combn(1:4,2,FUN=sum)
# [1] 3 4 5 5 6 7

一个用户定义函数的例子:

x <- 11:14
combn(1:4,2,FUN=function(i,a) sum(a[i]),a=x)
#[1] 23 24 25 25 26 27

这里(在匿名函数中)i 是用作索引和参数的组合 a 是我传递给的向量 x

用户定义的命名函数也是如此:

fun <- function(i,a) sum(a[i])
combn(1:4,2,FUN=fun,a=x)

【讨论】:

  • ^不是我想要的
  • @user2560984 anyone 怎么知道你在找什么?你没有提供一个很好的例子。 loop{ operation that uses combination } 什么也没告诉我们。你甚至读过我发布的链接吗?在没有更多信息的情况下,Roland 已经回答了您发布的问题。
  • 那么更好地解释您正在寻找的内容并显示输入和所需的输出。
  • 好的,所以在您提供的第一段代码中,它会一次生成所有组合,但我想一次生成一个,这样可以节省更多内存...
  • 好的,但是对于每个组合,您如何处理函数(或“操作”)的结果?存储它们?然后你可以使用第二个命令(这是我回答的重要部分)。否则,您需要提供更多详细信息,即您真正想要做什么。
猜你喜欢
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
相关资源
最近更新 更多