2017-07-30 49 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

很亲切的解释!这是非常有益的感谢! –