2016-01-29 23 views
6

Na przykład obecnie pracuję nad funkcją, która pozwala zobaczyć, ile pieniędzy możesz mieć, jeśli zainwestowałeś na giełdzie. Obecnie używa on struktury pętli, co mnie naprawdę irytuje, ponieważ wiem, że prawdopodobnie istnieje lepszy sposób na zakodowanie tego i wykorzystanie wektorów w R. Tworzę też fałszywe wektory przed uruchomieniem funkcji, co wydaje się trochę dziwne.Czy istnieje sposób na uproszczenie funkcji w R, które wykorzystują pętle?

Wciąż początkujący w R (właśnie zaczął!), Więc wszelkie pomocne wskazówki są bardzo cenne!

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)) 

Odpowiedz

10

to pewnie napisać

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

ale to moje preferencje za korzystanie funkcjonałami. Nie ma nic złego w używaniu tutaj pętli for.

+4

Jakie są zalety robienia tego w ten sposób? – Ruben

+2

Brak, pragmatycznie. Jest bardziej idiomatyczny dla tych, którzy myślą funkcjonalnie. Ale 'Reduce' with accumulate to po prostu dobrze zaimplementowana pętla' for'. Nie ma nic złego w używaniu pętli 'for' w pytaniu, jak wspomniano. –