求向量(R)中所有可能的和

求向量(R)中所有可能的和,r,combinations,R,Combinations,我有这样一个美元价值向量(vec): 如果我有一个由这些数字的总和引起的费用,我怎么能找到它呢?例如,如果电荷为6747.81,则它一定是由1506.20+3237.04+2004.57(第3、29和31个矢量元素)产生的。在给定和的情况下,如何求解这些向量元素 我可以想象,找到所有可能的和就是答案,然后将它与导致它的向量元素相匹配 我用combn(vec,3)查找所有3个,但这并不能完全满足我的需要 您需要在combn之后使用colSums(或apply)来获取总和 set.seed(100)

我有这样一个美元价值向量(vec):

如果我有一个由这些数字的总和引起的费用,我怎么能找到它呢?例如,如果电荷为6747.81,则它一定是由1506.20+3237.04+2004.57(第3、29和31个矢量元素)产生的。在给定和的情况下,如何求解这些向量元素

我可以想象,找到所有可能的和就是答案,然后将它与导致它的向量元素相匹配


我用combn(vec,3)查找所有3个,但这并不能完全满足我的需要

您需要在
combn
之后使用
colSums
(或
apply
)来获取总和

set.seed(100)
# Generate fake data
vec <- rpois(10, 20)
# Get all combinations of 3 elements
combs <- combn(vec, 3)
# Find the resulting sums
out <- colSums(combs)
# Making up a value to search for
val <- vec[2]+vec[6]+vec[8]
# Find which combinations lead to that value
id <- which(out == val)
# Pull out those combinations
combs[,id]

编辑:只是看到使用3个项目不一定有限制。我们可以通过对每一个可能的样本大小进行分析来概括这一点,但我现在没有时间这么做。即使是中等规模的问题,它也会相当缓慢。

似乎是背包问题的一个特例,您必须完美地填充它。这是一个NP问题,你可能只需要强行解决它。在选择3个值的情况下查找所有组合是行不通的;你需要的每一个组合都不超过你的目标值。也就是说,你可能有10件便宜的物品或2件昂贵的物品。除非你的问题被限制在一小部分要加在一起,否则这个问题会变得非常有趣。即使只有32个数字向量,您也需要计算43亿个唯一和(32选择1到32)。
vec@Vlo除非我弄错了,否则无法方便地找到用于给出每个和的数字,这是必需的。
set.seed(100)
# Generate fake data
vec <- rpois(10, 20)
# Get all combinations of 3 elements
combs <- combn(vec, 3)
# Find the resulting sums
out <- colSums(combs)
# Making up a value to search for
val <- vec[2]+vec[6]+vec[8]
# Find which combinations lead to that value
id <- which(out == val)
# Pull out those combinations
combs[,id]
> vec
 [1] 17 12 23 20 21 17 21 18 22 22
> val
[1] 47
> combs[,id]
     [,1] [,2]
[1,]   17   12
[2,]   12   17
[3,]   18   18