在模拟研究中,我需要生成所有不同的方法来生成1到n(n>m)之间的m个数字的序列,使数字之和为n,即

nums <- c(n_1, n_2, ..., n_m)

受限制

min(num) > 0 & sum(nums) == n

换句话说:将n个元素的集合可能划分为m个不同的子集.我知道这种分区的数量是"第二类斯特林数",这使得这对于大n来说是不可行的,但对于小n来说我需要它.

Note that this a different problem from finding all permutations,答案为in this thread.相反,这是关于分区的.

推荐答案

partitions包(GitHub)中,partitions::compositions(n, m, include.zero)应该可以.这里,n代表每个载体的总和,m代表该载体的元素数量,include.zero=FALSE确保没有零.

partitions::compositions(n=5, m=2, include.zero=FALSE) |> t()
# [1,] 4 1
# [2,] 3 2
# [3,] 2 3
# [4,] 1 4

R相关问答推荐

使用R的序列覆盖

如果列中存在相同的字符串,则对行值进行总和

有没有一种方法可以从函数中创建一个值的列表,然后将这些值变成R中的直方图?我一直觉得不行

隐藏e_mark_line的工具提示

derrr summarise每个组返回多行?

R-更新面内部的栅格值

如何在所有绘图中保持条件值的 colored颜色 相同?

矩阵的堆叠条形图,条形图上有数字作为标签

为左表中的所有行使用值Fill滚动左连接

根据列表中项目的名称合并数据框和列表

如何使用同比折线图中的个别日

如何提取R中其他字符串和数字之间的字符串?

多元正态分布的计算

网络抓取新闻标题和时间

如何移动点以使它们的打印不重叠

如何在刻面和翻转堆叠条形图中对齐geom_text()

无法保存gglot的所有pdf元素

识别部分重复行,其中一行为NA,其重复行为非NA

将日期列从字符转换为日期得到的结果是NAS

修复标签重叠和ggploy内的空间