我想绘制包含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)
答案 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简写。