在R中,有简化使用循环的函数的方法吗?

6
例如,我目前正在开发一个函数,可以帮助您了解如果在股市上投资可能会有多少钱。它目前使用的是循环结构,这让我感到非常烦恼,因为我知道可能有更好的编码方式,并且可以在R中利用向量。在运行函数之前,我还创建了虚拟向量,这似乎有点奇怪。

我还是R的初学者(刚开始!),所以任何有帮助的指导都非常感激!

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))
1个回答

10

我可能会写

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

但那只是我对使用函数式编程的偏好。这里你使用 for 循环也没错。


4
用这种方式做有什么优势? - Ruben
2
在实践中,None 更符合函数式编程思想的习惯用法。但是使用 Reduce 和累加器的结果就是一个优秀实现的 for 循环。对于这个问题的陈述,使用 for 循环并没有什么问题。 - A. Webb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接