R - 绘制预定义函数的 3D 表面



我想绘制预定义函数的 3D 表面,其中包括 switch 语句。如果我运行我的代码,"较长的对象长度不是较短对象长度的倍数"和"get(as.character(FUN(,模式 = "函数"中的错误,envir = envir(:找不到模式"函数"的对象"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)

当您在f中保存函数调用时,您正在保存函数的结果,而不是函数调用本身。为了在outer()中使用你的函数作为FUN参数,你应该将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 简写。

最新更新