我有一个相当简单的问题,但不幸的是无法得到结果:
我想将 GBSVolatility 函数应用于我的 data.frame 的每一行。

我做了以下事情:

> vol <- function(x) GBSVolatility(x$Price, "c", S = 1000, x$Strike, Time = 1/4,
r = 0.01, b = 0.02, maxiter = 500)
> foo$iv <- apply(foo, 1, vol)

但这不起作用。有人能告诉我为什么吗?

非常感谢

达尼

更新:
谢谢你的建议。我的数据框名为 foo,看起来像这样
Date Price Strike Name
1.1  100   1200    X
1.1  120   1500    P
etc.

我想用隐含波动率创建一个新专栏。我尝试申请,
vol <- function(x) GBSVolatility(x["Price"], "c", S = 1000, x["Strike"],
     Time = 1/4,  r = 0.01, b = 0.02, maxiter = 500)
foo$iv <- apply(foo, 1, vol)

但它并没有奏效。

你有什么其他的建议?谢谢

最佳答案

如果数据框的一列或多列是字符,则在行上申请数据框会将数字转换为字符。如此简单的解决方法是再次转换为 vol:

vol <- function(x) GBSVolatility(as.numeric(x["Price"]), "c", S = 1000,
  as.numeric(x["Strike"]), Time = 1/4, r = 0.01, b = 0.02, maxiter = 500)
apply(foo, 1, vol)

这并不优雅。
我现在不记得更优雅的方式,可能使用 d*ply 或其他东西......

可能这更优雅:
library(plyr)
vol <- function(x) GBSVolatility(x$Price, "c", S = 1000, x$Strike,
  Time = 1/4, r = 0.01, b = 0.02, maxiter = 500)
foo$iv <- adply(foo, 1, vol)$V1

关于r - 将 GBSVolatility 应用到每一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4408222/

10-12 17:23