【发布时间】:2016-04-27 06:11:40
【问题描述】:
我需要生成“n”个变量的所有可能组合,使变量总和为 100。变量的范围从 0 到 100,并且可以改变 1 的步长。考虑到,我在 R 中为此创建了一个代码n = 10,生成的数据框包含所有可能的组合。但是,我正在寻找使“n”动态化的可能性,以便用户可以灵活地在启动时将 n 作为参数传递。 任何帮助将不胜感激..
row <- list()
z = 1
for (a in seq(from = 0, to = 100, by = 1)) {
for (b in seq(from = 0, to = 100, by = 1)) {
for (c in seq(from = 0, to = 100, by = 1)) {
for (d in seq(from = 0, to = 100, by = 1)) {
for (e in seq(from = 0, to = 100, by = 1)) {
for (f in seq(from = 0, to = 100, by = 1)) {
for (g in seq(from = 0, to = 100, by = 1)) {
for (h in seq(from = 0, to = 100, by = 1)) {
for (i in seq(from = 0, to = 100, by = 1)) {
for (j in seq(from = 0, to = 100, by = 1)) {
if (a + b + c + d + e + f + g + h + i + j == 100) {
row[[z]] <- (c(a,b,c,d,e,f,g,h,i,j))
z = z + 1
}
}
}
}
}
}
}
}
}
}
}
finaldata <- as.data.frame(do.call(rbind, row))
【问题讨论】:
-
这是数论的问题,它被称为:数字100的分区(允许零)。您必须从具有 9 个部分的分区中递归具有 10 个部分的分区(依此类推......从 8 个部分...... 7 个部分......)!
-
示例:第 10 部分的值可以是 0, 1, ..., 100。因此您可以从 0+“100 的分区”构建“100 分 10 部分”的分区9 部分”和 1+“99 部分”的部分和 ...
-
即使你成功地完成了这个,你也不会喜欢结果。 R 中 for 循环的性能很糟糕。这么多嵌套的 for 循环会让 R 陷入困境。