#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)