0

この関数を実行しようとしましたが、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))
}
4

1 に答える 1

1

マトリックスのインデックスが正しくありません。単一の値を返します。これに要素value[1]を割り当てようとしています。ithitrial

1 行目の th 要素に割り当てると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ベクトル化されたループとifステートメントを削除するpmaxと、要素ごとに値と 0 の最大値が返されます。

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

適切なプログラミングの問題として、グローバル変数に依存しないように、、、、およびを引数として関数rS_o追加しqます。sigmaperiod

于 2012-10-09T02:50:45.450 に答える