向R

时间:2019-04-28 08:00:41

标签: r while-loop

我最近在一个帖子中提出了一个非常类似的问题。不幸的是,我没有为要实现的目标提供足够的背景信息。

我想编写一个向功能添加项的循环。重要的是,我需要使用一个函数来在以后的某个时间点找到导数。

我以前编写了将值添加到向量的循环。当尝试使用空函数执行相同操作时,它不会添加元素,而只是重新定义了函数。

添加向量时我的意思的示例:

x <- c()
i <- 1
while(length(x)<10){
  x <- c(x,i) 
  i <- i + 1
}

我现在的目标是做相同的事情,但是将其他元素存储在一个函数中。 我目前尝试这样做只是在重新定义函数,并且不使用i和C的数值,而是将它们保留为一个槽。

我的代码:

x <- function(r){}
i <- 1
s <- c(0.01,0.02,0.03)
C <- 5
while(i <= length(s)){
  x <- function(r){
    x + C/(1+r)^i
  }
  i <- i+1
}

此循环的预期结果将是一个如下所示的函数。

x = function(r){5/(1+r)^1 + 5/(1+r)^2 + 5/(1+r)^3}

1 个答案:

答案 0 :(得分:2)

您可以通过创建字符串来创建函数,然后使用eval(parse(x))来评估该字符串。

createfunction <- function(C, s) {

    output <-  ""

    for(i in 1:length(s)) {

        if(i == 1) {
            start <- paste0("function(r){", C, "/1+r^",i, " + ")
        } else if(i > 1 & i < length(s)) {
            output <- paste0(output, C, "/1+r^",i, " + ") 
        } else {
            output <- eval(parse(text = paste0(start, output, C, "/1+r^",i, "}")))
        }
    }
    return(output)
}


createfunction(6, c(0.01, 0.02, 0.03, 0.02))