【发布时间】:2016-09-03 13:02:01
【问题描述】:
我需要制作一个包含所有可能性的数据框,其中七个变量的总和为 100,每个变量都可以是 0 到 100。 我实现了以下代码,但需要很长时间。
combina <- function(U){
d<- NULL
for (i in 0:U) {
for (j in 0:U) {
for (k in 0:U) {
for (l in 0:U) {
for (m in 0:U) {
for (n in 0:U) {
for (o in 0:U) {
if (i+j+k+l+m+n+o == U){
d <- rbind(d,c(i,j,k,l,m,n,o))
}
}
}
}
}
}
}
}
return(d)
}
如你所见,我使用 U 变量进行测试,在 15 之后它需要永远......
【问题讨论】:
-
当总和超过 100 时,您应该看到每个 for 循环的中断...
-
似乎
expand.grid或combn会提供一种更简单的方法......虽然这样的问题对于大型U 来说非常困难。 -
这似乎是一项简单的任务,但您要求 R 创建和评估 100^7(即 100 万亿)个不同的数字组合,每个组合包含 7 个数字。这是一项艰巨的任务。我同意@Laurel 的建议,即在总和超过目标值时打破循环,这至少会减少任务的大小。
-
您应该查看partitions package。根据该包中的
P()函数,“只有”大约 1.9 亿个分区,但计算它们仍然是一个很大的挑战。 -
The answers to this SO question 可能会有所帮助。