如何避免在R中有10个嵌套循环?

时间:2015-06-26 14:31:32

标签: r loops nested-loops

我正在尝试在R中执行以下操作:获取类型

的每个向量

c(a1, a2, ... , a10),其中

a1 < a2 < ... < a10

a1, ... , a10 in c(1:100)

这可以使用嵌套循环,

for(a1 in 1:90) {

  for(a2 in (a1+1):91) {

for(a3 in (a2+1):92) {

等...

但是你会明白为什么我宁愿避免这个解决方案。此外,我希望能够将a的数量和它们的范围都设置为可参数,以便获得例如(a1, a2, a3) in 1:10

有没有人知道我怎么能这样做?请记住,我确实需要浏览(a1:a10)的所有可能组合,以便能够在以后的函数中使用结果。

3 个答案:

答案 0 :(得分:2)

让问题从a1 < a2 < a3 1:5减少到combn(5, 3) # [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] #[1,] 1 1 1 1 1 1 2 2 2 3 #[2,] 2 2 2 3 3 4 3 3 4 4 #[3,] 3 4 5 4 5 5 4 5 5 5

choose(5, 3)
#[1] 10

那是多少种组合?

choose(100, 10)
#[1] 1.731031e+13

如上所述,问题的组合是多少?

app = angular.module('app', ['ui.router'])

angular.element(document).ready(() => angular.bootstrap(document, ['app']))

import './controllers/index'

app.run(() => {
    })

计算它们的次数太多了。

答案 1 :(得分:1)

喜欢这个吗?

sapply(0:10,"+",1:90)
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
# [1,]    1    2    3    4    5    6    7    8    9    10    11
# [2,]    2    3    4    5    6    7    8    9   10    11    12
# [3,]    3    4    5    6    7    8    9   10   11    12    13
# [4,]    4    5    6    7    8    9   10   11   12    13    14

每列都是你的载体。第1列是1-90,第2列是2-91,......,第11列是11-100。

答案 2 :(得分:0)

你会有很多组合!

这是一个功能,但我不能使用1:100获得超过4个数字,而不会在我的计算机上长时间运行。

combn

通过seq(1:maxn)使用来自getcombinations(3,4) V1 V2 V3 1 1 2 3 2 1 2 4 3 1 3 4 4 2 3 4 的所有大小组合,然后重新排列一点来工作。

public class MyCollection {
    public void add(String s) {
        // add to inner array
    }
}