2012-10-09 52 views
0

我試圖執行這個函數,但我一直得到一個錯誤,我的if語句:錯誤在if(value [1] [i] < 0){:missing value其中TRUE/FALSE需要:如果語句R缺失值

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

我猜你有失蹤您的數據中值爲「NA」。 –

+0

所以變量「審判」應該是20? – Josh

回答

1

您正在爲您的矩陣編制索引不正確。 value[1]會返回一個值,你那麼努力的ith元素分配,爲i高達trial

如果分配給i個元素於第1行(這看起來好像你正在嘗試做的),那麼它會工作

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

你可以pmax刪除for環和if聲明,被矢量並且將返回的elementwise最大的價值和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_oqsigmaperiod作爲參數傳遞給你的函數,因此,它不依賴於全局變量

+0

非常感謝! .value現在保存適當的值 – Josh

+0

您是否有理由將值創建爲矩陣,而不是數值向量? – mnel

+0

當我嘗試計算sd(.value)時,出現錯誤,此向量的構造方式不同嗎? – Josh