我试图执行这个函数,但是我的if语句一直出错:if(value [1] [i]< 0){:缺少值需要TRUE / FALSE错误:
Monte_Carlo <- function(trial)
{
S_T <- S_o*exp((r - q - (1/2)*sigma^2)*period + sigma*rnorm(trial, mean = 0, sd = 1))
K <- matrix(100, nrow = 1, ncol = 20)
value <- K - S_T
for(i in 1:trial)
{
if(value[1][i] < 0)
{
value[1][i] = 0;
}
}
return (mean(value)*exp(-r))
}
答案 0 :(得分:1)
您正在错误地索引矩阵。 value[1]
会返回一个值,然后您尝试为ith
分配i
元素,最多trial
如果您分配到第1行中的i
元素(看起来好像您正在尝试这样做),那么它将起作用
Monte_Carlo <- function(trial)
{
S_T <- S_o*exp((r - q - (1/2)*sigma^2)*period + sigma*rnorm(trial, mean = 0, sd = 1))
K <- matrix(100, nrow = 1, ncol = 20)
value <- K - S_T
for(i in 1:trial)
{
if(value[1, i] < 0)
{
value[1,i] = 0;
}
}
return (mean(value)*exp(-r))
}
您可以移除带for
的{{1}}循环和if
语句,该语句已向量化,并将返回元素的最大值和0。
pmax
作为一个好的编程问题,我会将Monte_Carlo <- function(trial)
{
S_T <- S_o*exp((r - q - (1/2)*sigma^2)*period + sigma*rnorm(trial, mean = 0, sd = 1))
K <- matrix(100, nrow = 1, ncol = trial)
value <- K - S_T
.value <- pmax(value,0)
return (mean(.value)*exp(-r)
}
,r
,S_o
,q
和sigma
添加为您的函数的参数,以便它不依赖于全局变量