Добавить результат в список на языке R и задать вопрос

#r #function #sapply #montecarlo

#r #функция #sapply #монтекарло

Вопрос:

Новичок в R, хочу написать функцию монте-Карло, которая принимает 3 аргумента в качестве входных данных:

 price: stock prices vector over a time period
strike: strike price 
knock : knockout price
  

Вот мой код:

 payoff.arr <- list()
option_payoff <- function(hsp, strike, knock){
  for (p in hsp){
    if (p <knock){
      payoff <- max(p-strike, 0)
    }
    else{
      payoff <- 0
    }
    payoff.arr<-append(payoff)
  }
}
  

Однако, когда я вызываю функцию: option_payoff(price,105,130) (цена — это вектор),
она показывает: Error in append(payoff) : argument "values" is missing, with no default
Что я делаю не так? И для функций, которые принимают более 1 аргументов, как мне использовать sapply или lapply? Я пытаюсь использовать sapply, и он показывает : Error in FUN(X[[i]], ...) : argument "knock" is missing, with no default

Комментарии:

1. append требуется как минимум два аргумента — первый — список для добавления, второй — добавляемые значения. Я думаю, вы хотите payoff.arr <- append(payoff.arr, payoff) .

2. Вы также можете инициализировать payoff <- 0 перед if оператором и избавиться от else . Я не знаю, каковы ваши объекты параметров, но for циклы обычно можно заменить в векторизованном R членом apply функций

Ответ №1:

Вы должны указать что-то для добавления!

например

 > append(1:3,666)
[1]   1   2   3 666
  

добавляет 666 к 1,2,3 .

Как упоминалось в комментариях, вы, вероятно, захотите payoff.arr <- append(payoff.arr, payoff)