2016-09-26 2 views
0

Avoir la matrice et le vecteur suivants.Multiplier récursivement en r

x<-matrix(c(1,4,7, 
     2,5,8, 
     3,6,9), nrow = 3) 
w <- c(1,1,1) 
res <- c() 

Quelle est la meilleure façon de multiplier recursiverly till obtenir une somme de désir des résultats comme en témoigne:

res[1]<-w %*%x[1,] 
res[2]<-w %*%x[2,] 
res[3]<-w %*%x[3,] 
res[4]<-w %*%x[1,] 
res[5]<-w %*%x[2,] 

sum(res)>1000 #Multiply recursiverly till the sum of the results sum(res) goes further than 1000. 
+1

vous a tagué avec « en boucle ». Ce serait ma recommandation. – Frank

+0

@Frank Je sais qu'avec une "boucle while", mais je ne sais pas comment. Pouvez-vous me montrer avec un exemple comment le faire. –

+0

Ils sont à peu près les mêmes dans tous les langages de programmation. Voici un exemple à partir de: https://www.rosettacode.org/wiki/Loops/While#R – Frank

Répondre

1

Voici comment faire récursive:

f <- function(x, w, res){ 
    if (sum(res)>1000) 
     return(res) 
    res <- c(res, x%*%w) 
    f(x,w,res) 
} 

Appelez-le avec vos objets prédéfinis. C'est:

f(x, w, res) 

Ce qui vous donnera:

# [1] 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 
# [62] 15 24 6 15 24 6 15 24 
0

Si vous avez toujours des données sur le même format alors quelque chose le long des lignes

res <- min(floor(1000/cumsum(rowSums(x)))) * cumsum(rowSums(x)) + cumsum(rowSums(x)) 
min(res[res>1000]) 

donnera la réponse à vous sans avoir à boucler. Peut-être enveloppé dans une fonction pour gérer une autre valeur que 1000.

Au moins la façon dont je comprends votre question

+0

Je voudrais avoir des valeurs différentes de 1000. Je viens de poster cette valeur comme un exemple. Pourriez-vous poster comment envelopper dans une fonction. –

+0

Utilisez exactement la même approche que @ m0h3n - qui avait également 1000 codés en dur. – ekstroem