绘制预定义函数的3d表面

时间:2017-07-30 13:57:56

标签: r 3d

我想绘制包含switch语句的预定义函数的3D表面。如果我运行我的代码,“较长的对象长度不是较短对象长度的倍数”和“get中的错误(as.character) (FUN),mode =“function”,envir = envir):没有找到模式'function'的对象'f'“这两个打印没有我想要的结果。简化代码如下。任何人都可以解决这个问题吗?

    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 个答案:

答案 0 :(得分: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,因为它是逻辑TRUE的R简写。