Добавление членов к функции в R - PullRequest
2 голосов
/ 28 апреля 2019

Я недавно сделал сообщение с очень похожим вопросом.К сожалению, я не дал достаточного контекста тому, чего я хочу достичь.

Я хочу написать цикл, который добавляет термины в функцию.Важно, чтобы я в конечном итоге получил функцию, чтобы найти производную в более поздний момент времени.

Ранее я написал циклы, которые добавляют значения к векторам.При попытке сделать то же самое с пустой функцией, она не добавляет элементы, а просто переопределяет функцию.

Пример того, что я имею в виду при добавлении в вектор:

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

MyТеперь цель состоит в том, чтобы сделать то же самое, но сохранить дополнительные элементы в функции.Моя попытка сделать это в настоящее время только переопределяет функцию, а также не использует числовые значения для 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 Ответ

2 голосов
/ 28 апреля 2019

Вы можете создать функцию, создав строку, а затем использовать 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...