在R

时间:2015-10-07 15:52:58

标签: r loops syntax combinations

我需要使用' n'来创建组合。最小值为5&的变量最大值为80,它们之间的差值为x,每个组合的值之和应等于100.

1 个答案:

答案 0 :(得分:0)

对于 n 变量,您需要将可变数量的参数传递给expand.grid。您可以使用do.call

combs = do.call(expand.grid, rep(list(seq(from = 5, to = 80, by = 5)), n))

如果要自定义名称,则需要单独分配(通过setNames)。例如,要获取名称m1 ... mn,请使用:

values = rep(list(seq(from = 5, to = 80, by = 5)), n)
names = paste0('m', seq_len(n))
combs = do.call(expand.grid, setNames(values, names))

此外,我不会将总数存储在相同的data.frame中 - 使用单独的变量:

total = rowSums(combs)

......但实际上这根本不是必要的。

放在一个函数定义中:

my_combs = function (n, from, to, by, total) {
    values = rep(list(seq(from, to, by)), n)
    names = paste0('m', seq_len(n))
    combs = do.call(expand.grid, setNames(values, names))
    combs[rowSums(combs) == total, ]
}

你这样称呼它(例如):

result = my_combs(n = 2, from = 5, to = 80, by = 5, total = 100)

哪个收益率:

> result
    m1 m2
64  80 20
79  75 25
94  70 30
109 65 35
124 60 40
139 55 45
154 50 50
169 45 55
184 40 60
199 35 65
214 30 70
229 25 75
244 20 80