gpt4 book ai didi

r - 如何在 R 中迭代生成组合?

转载 作者:行者123 更新时间:2023-12-02 00:07:06 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How do I find all possible subsets of a set iteratively in R?

(1 个回答)


8年前关闭。




所以我目前正在使用以下代码来生成我的组合:

组合(x,y)

但问题是函数存储了所有可能的组合。我不想存储它们,我只想通过循环或其他方式来生产它们。这对我的程序来说会更有效率。有没有办法通过 for 循环生成组合而不是将它们全部存储?

我知道我在这里问了一个类似的问题:
How do I find all possible subsets of a set iteratively in R?

但是在那个解决方案中,组合仍然被存储......

这里有一些更详细的信息:

假设我想找到 4 选择 2。combn(4,2) 基本上会存储以下内容:
((1,4),(1,3),(1,2),(2,4),(2,3)(3,4))

我想要的是这个:

   loop{
produces one combination at a time
}

最佳答案

这是一个建议,它允许基于循环的前一次迭代中使用的组合为循环的当前迭代生成组合。

## Function definition
gen.next.cbn <- function(cbn, n){
## Generates the combination that follows the one provided as input
cbn.bin <- rep(0, n)
cbn.bin[cbn] <- 1
if (tail(cbn.bin, 1) == 0){
ind <- tail(which(cbn.bin == 1), 1)
cbn.bin[c(ind, ind+1)] <- c(0, 1)
}else{
ind <- 1 + tail(which(diff(cbn.bin) == -1), 1)
nb <- sum(cbn.bin[-c(1:ind)] == 1)
cbn.bin[c(ind-1, (n-nb+1):n)] <- 0
cbn.bin[ind:(ind+nb)] <- 1
}
cbn <- which(cbn.bin == 1)
}

## Example parameters
n <- 6
k <- 3

## Iteration example
for (i in 1:choose(n, k)){
if (i == 1){
cbn <- 1:k
}else{
cbn <- gen.next.cbn(cbn, n)
}
print(cbn)
}

# [1] 1 2 3
# [1] 1 2 4
# [1] 1 2 5
# [1] 1 2 6
# [1] 1 3 4
# [1] 1 3 5
# [1] 1 3 6
# [1] 1 4 5
# [1] 1 4 6
# [1] 1 5 6
# [1] 2 3 4
# [1] 2 3 5
# [1] 2 3 6
# [1] 2 4 5
# [1] 2 4 6
# [1] 2 5 6
# [1] 3 4 5
# [1] 3 4 6
# [1] 3 5 6
# [1] 4 5 6

关于r - 如何在 R 中迭代生成组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17683370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com