我最近在一个帖子中提出了一个非常类似的问题。不幸的是,我没有为要实现的目标提供足够的背景信息。
我想编写一个向功能添加项的循环。重要的是,我需要使用一个函数来在以后的某个时间点找到导数。
我以前编写了将值添加到向量的循环。当尝试使用空函数执行相同操作时,它不会添加元素,而只是重新定义了函数。
添加向量时我的意思的示例:
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}
答案 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))