2017-07-30 52 views
0

我要繪製預定義函數的三維表面,其包括切換statement.If我運行代碼,「更長的對象長度不短對象長度的倍數」和「錯誤在獲取(as.character(FUN),模式=「功能」,ENVIR = ENVIR):對象模式「功能」的「F」未找到」這兩個無果我打算被打印。簡化代碼如下。任何人都可以解決此問題?3D表面

BlackScholes<-function(S, K, r, q, vol, T, result){ 

    switch(result, 
    callprice = S+k+T, 
    putprice = K+T, 
    calldelta = exp(-q * T), 
    putdelta = exp(-q * T) 
    } 

    x<-seq(1950000,2700000,by = 5000) 
    y<-seq(0,30,by = 1) 
    f<-BlackScholes(x,220000,0.014,0,0.2,y,"calldelta") 
    z<-outer(x,y,f) 
    persp(x,y,z) 

回答

1

當您保存函數調用中f,要保存功能的結果,而不是函數調用自身。爲了使用您的函數作爲FUN參數outer(),你應該通過的BlackScholes()作爲額外的參數指定的參數outer()

z <- outer(
    x, 
    y, 
    FUN = 'BlackScholes', 
    K = 220000, 
    r = 0.014, 
    q = 0, 
    vol = 0.2, 
    result = 'callprice' 
) 

persp(x,y,z) 

另外,你應該從命名任何變量T避免,因爲它是 - [R簡寫邏輯TRUE

+0

很親切的解釋!這是非常有益的感謝! –