如何在R中创建对象矢量?

时间:2014-05-18 20:56:18

标签: arrays r object vector quantlib

我需要使用针对R的QuantLib包来计算金融期权的隐含波动率。 我在使用函数“EuropeanOptionImpliedVolatility”时遇到了麻烦,因为它的输出是一个Object(称为ImpliedVolatility)。

largo = nrow(call26) #number of rows in my data set
impl_vol= vector("list",largo)
for(i in largo){
  impl_vol[[i]] = EuropeanOptionImpliedVolatility(type="call", value=valor_opcion[i],
      underlying=st[i], strike=strike[i], dividendYield=dividendo[i], 
      riskFreeRate=rf[i], maturity=maturity[i], volatility=0.4)
}

结果是:

list(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, structure(list(impliedVol = 0.173643438965225, 
        parameters = structure(list(type = "call", value = 52.95, 
            underlying = 1497.66, strike = 1680, dividendYield = 0.01, 
            riskFreeRate = 0.04, maturity = 0.983561644, volatility = 0.4), .Names = c("type", 
        "value", "underlying", "strike", "dividendYield", "riskFreeRate", 
        "maturity", "volatility"))), .Names = c("impliedVol", 
    "parameters"), class = c("EuropeanOptionImpliedVolatility", 
    "ImpliedVolatility")))

我需要隐含的波动率...如果我计算一个单一的金融期权我可以通过

来访问它
valor$impliedVol

我该怎么办? 谢谢!

2 个答案:

答案 0 :(得分:0)

循环中出现错误,而不是:

for(i in largo){

它是:

for(i in 1:largo){

由于此错误,仅计算最后一个元素(索引195)的隐含波动率(正如您在已发布的输出结构中可以清楚地看到的那样,第一个194列表槽位是NULL,最后一个有值。)

一旦你修正了这个错字,只需要访问该值:

impl_vol[[i]]$impliedVol

答案 1 :(得分:0)

快速的:

  • 您无法存储compond对象(例如EuropeanOptionImpliedVolatility()在向量中返回的对象。

  • 您可以将它们存储在列表中

  • 如果你知道尺寸,你可以用矩阵填充它们。

  • 否则,您可以增长data.frame对象(效率不高)

如果您想要的只是隐含波动率,请将其提取并存储在矢量中。 RQuantLib软件包提供了几乎所有用途的示例。