在 R 中创建总计为特定数字的所有向量组合
Create all vector combinations summing up to a specific number in R
我正在尝试创建一个矩阵,其中包含相同向量的两个组合,总和为 2300。我在 R 中使用 combn
函数,请参见下面的代码:
vector <- 400:1900
combinations <- combn(vector, 2, function(x) subset(x, sum(x)==2300))
很遗憾,此代码无效。我收到以下错误:
Error in combn(r2, 2, function(x) subset(x, sum(x) == 2300)) :
dims [product 1125750] do not match the length of object [0]
有谁知道我做错了什么?
非常感谢,
只园
试试这个:
combinations <- combn(vector,2,function(x) ifelse(sum(x[1], x[2])==2300,
list(c(x[1],x[2])), list(c(0,0))))
res <- combinations[lapply(combinations, sum)>0]
head(res)
# [[1]]
# [1] 400 1900
# [[2]]
# [1] 401 1899
# [[3]]
# [1] 402 1898
# [[4]]
# [1] 403 1897
# [[5]]
# [1] 404 1896
# [[6]]
# [1] 405 1895
如果你想得到一个矩阵:
matrix(unlist(res), ncol = 2, byrow = TRUE)
我正在尝试创建一个矩阵,其中包含相同向量的两个组合,总和为 2300。我在 R 中使用 combn
函数,请参见下面的代码:
vector <- 400:1900
combinations <- combn(vector, 2, function(x) subset(x, sum(x)==2300))
很遗憾,此代码无效。我收到以下错误:
Error in combn(r2, 2, function(x) subset(x, sum(x) == 2300)) :
dims [product 1125750] do not match the length of object [0]
有谁知道我做错了什么? 非常感谢,
只园
试试这个:
combinations <- combn(vector,2,function(x) ifelse(sum(x[1], x[2])==2300,
list(c(x[1],x[2])), list(c(0,0))))
res <- combinations[lapply(combinations, sum)>0]
head(res)
# [[1]]
# [1] 400 1900
# [[2]]
# [1] 401 1899
# [[3]]
# [1] 402 1898
# [[4]]
# [1] 403 1897
# [[5]]
# [1] 404 1896
# [[6]]
# [1] 405 1895
如果你想得到一个矩阵:
matrix(unlist(res), ncol = 2, byrow = TRUE)