2016-07-12 7 views
-1

Я пытаюсь создать матрицу с двумя комбинациями того же вектора, что сумма до 2300. Я использую функцию combn в R, см. Код ниже:Создайте все комбинации векторов, суммируя их до определенного числа в R

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] 

Кто-нибудь знает, что я сделал не так? Большое спасибо,

Гион

+1

Взгляните на [эту должность] (HTTP: //stackoverflow.com/questions/38081651/how-to-find-all-the-possible-k-integers-which-sum-of-them-equals-to-a-certain-nu/38082278). Я думаю, это может быть полезно. – lmo

ответ

1

Попробуйте это:

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)