R: a partir de um vetor, liste todos os subconjuntos de elementos para que sua soma passe apenas um valor
Desculpe antecipadamente se a resposta (1) é trivial; ou (2) por aí, mas não consegui resolver esse problema ou encontrar e responder on-line. Qualquer ponteiro será muito apreciado!
Preciso de um pedaço de código que possa executar um vetor e retornar todos os subconjuntos possíveis de elementos cuja soma cumulativa passa um valor limite.
Observe que não quero apenas os subconjuntos que me dão exatamente o limite. A soma cumulativa pode estar acima do limite, desde que o algoritmo pare de adicionar um elemento extra se o valor já tiver sido alcançado.
# A tiny example of the kind of input data.
# However, note that efficiency is an issue
# (I need to replicate the example in a large dataset)
v <- seq(1, 3) # My vector
threshold <- 3 # My threshold value
# I would like to get a list with the combinations
# 1 2
# 1 3
# 2 3
# 3
Este trecho de código funciona, mas é a solução mais difícil do mundo ...
for (i in 1: length(v)){
thisvalue <- v[i]
if (thisvalue >=threshold) {
cat (v[i], "\n",sep="\t")
} else {
for (j in (i+1): length(v)){
thisvalue <- v[i]+v[j]
if (thisvalue >=threshold) {
cat (c(v[i], v[j]), "\n",sep="\t")
} else {
for (k in (i+2): length(v)){
thisvalue <- v[i]+v[j]+v[k]
if (thisvalue >=threshold) {
cat(c(v[i],v[j],v[k]),"\n",sep="\t")
}
}
}
}
}
}