2016-01-29 14 views
6

Ví dụ: Tôi hiện đang làm việc với chức năng cho phép bạn xem bạn có thể có bao nhiêu tiền nếu bạn đầu tư vào thị trường chứng khoán. Hiện tại tôi đang sử dụng cấu trúc vòng lặp, điều này thực sự gây khó chịu cho tôi, bởi vì tôi biết có cách tốt hơn để mã hóa và tận dụng vectơ trong R. Tôi cũng tạo các vectơ giả trước khi chạy hàm, điều này có vẻ hơi lạ.Có cách nào để đơn giản hóa các chức năng trong R sử dụng vòng lặp không?

Vẫn là người mới bắt đầu tại R (chỉ mới bắt đầu!), Vì vậy mọi hướng dẫn hữu ích đều được đánh giá cao!

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

Trả lời

10

tôi có lẽ sẽ viết

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

nhưng đó là sở thích của tôi cho việc sử dụng functionals. Không có gì sai khi bạn sử dụng vòng lặp for tại đây.

+4

Lợi thế của việc thực hiện theo cách này là gì? – Ruben

+2

Không, thực tế. Nó là thành ngữ hơn cho những người nghĩ về chức năng. Nhưng 'Reduce' với tích lũy chỉ đơn giản là một vòng lặp' for' được thực hiện tốt. Không có gì sai khi sử dụng vòng lặp 'for' trong câu hỏi, như đã nói. –

Các vấn đề liên quan