2016-01-29 11 views
6

Ad esempio, attualmente sto lavorando a una funzione che consente di vedere quanti soldi si potrebbero avere investendo nel mercato azionario. Attualmente sta usando una struttura ad anello, che mi irrita molto, perché so che probabilmente c'è un modo migliore per codificarlo e sfruttare i vettori in R. Sto anche creando dei vettori fittizi prima di eseguire la funzione, il che mi sembra un po 'strano.C'è un modo per semplificare le funzioni in R che utilizzano i loop?

Ancora un principiante in R (appena iniziato!), Quindi qualsiasi guida utile è molto apprezzata!

set.seed(123) 
##Initial Assumptions 
initialinvestment <- 50000 # e.g., your starting investment is $50,000 
monthlycontribution <- 3000 # e.g., every month you invest $3000 
months <- 200 # e.g., how much you get after 200 months 

##Vectors 
grossreturns <- 1 + rnorm(200, .05, .15) # approximation of gross stock market returns 
contribution <- rep(monthlycontribution, months) 
wealth <- rep(initialinvestment, months + 1) 

##Function 
projectedwealth <- function(wealth, grossreturns, contribution) { 
    for(i in 2:length(wealth)) 
    wealth[i] <- wealth[i-1] * grossreturns[i-1] + contribution[i-1] 
    wealth 
} 

##Plot 
plot(projectedwealth(wealth, grossreturns, contribution)) 

risposta

10

Io probabilmente scrivere

Reduce(function(w,i) w * grossreturns[i]+contribution[i], 
    1:months,initialinvestment,accum=TRUE) 

ma questa è la mia preferenza per l'utilizzo funzionali. Non c'è niente di sbagliato nell'uso di un loop for qui.

+4

Qual è il vantaggio di farlo in questo modo? – Ruben

+2

Nessuno, in modo pragmatico. È più idiomatico per coloro che pensano funzionalmente. Ma 'Reduce' con accumulate è semplicemente un ciclo' for' ben implementato. Non c'è niente di sbagliato nell'uso del ciclo 'for' nella domanda, come affermato. –