【问题标题】:namespace locked for RQuantLib为 RQuantLib 锁定的命名空间
【发布时间】:2018-12-29 15:58:17
【问题描述】:

在 RStudio/Windows 上运行它。最后一行失败:

registerNames(names, package, ".global", add) 中的错误: 包“RQuantLib”的命名空间被锁定;全球没有变化 可以制作变量列表。

library(RQuantLib)

myStrike <- 1240
myPrice <- 1410

volVec <- c(0.1, 0.2, 0.3, 0.4, 0.5)
priceVec <- c(1500,1400,1300,1200,1100)
myType <- "put"
rfRate <- 0.02
maturity <- 360/360
vol <- 0.3


EO = EuropeanOption(type = myType,price = myPrice,strike = myStrike, dividendYield = 0,riskFreeRate = rfRate, maturity = maturity,volatility = vol )
EOres = EuropeanOptionArrays(type = myType,price = priceVec,strike = myStrike, dividendYield = 0,riskFreeRate = rfRate, maturity = maturity,volatility = volVec )
summary(EO)
plotOptionSurface(EOres)

【问题讨论】:

    标签: r quantlib


    【解决方案1】:

    感谢您提出这个问题,并为几天错过这个问题表示歉意。 GitHub 上的问题单也可以。

    您发布的代码(可能是从我的旧文档中引用的......)是错误的。 EuropeanOption()EuropeanOptionArrays() 的第二个参数现在是 underlying,而不是 price。所以我们做这个

    library(RQuantLib)
    
    myStrike <- 1240
    myPrice <- 1410
    
    volVec <- c(0.1, 0.2, 0.3, 0.4, 0.5)
    priceVec <- c(1500,1400,1300,1200,1100)
    myType <- "put"
    rfRate <- 0.02
    maturity <- 360/360
    vol <- 0.3
    
    
    EO <- EuropeanOption(type = myType, underlying = myPrice,strike = myStrike,
                         dividendYield = 0, riskFreeRate = rfRate, maturity = maturity,
                         volatility = vol )
    EOres <- EuropeanOptionArrays(type = myType, underlying = priceVec,strike = myStrike, 
                                  dividendYield = 0,riskFreeRate = rfRate, maturity = maturity,
                                  volatility = volVec )
    summary(EO)
    plotOptionSurface(EOres)
    

    接下来,在函数plotOptionSurface() 中我们需要注释掉对globalVariables() 的调用,这不能再在函数体中。所以让它例如

    pos <- function(EOres, ylabel="", xlabel="", zlabel="", fov=60) {
        if (requireNamespace("rgl", quietly=TRUE)) {
            #utils::globalVariables(c("clear3d", "bg3d", "ligh3d", "rgl.viewpoint", "rgl.surface", "tgl.texts"))
            axis.col <- "black"
            text.col <- axis.col
            ylab <- ylabel
            xlab <- xlabel
            zlab <- zlabel
            y <- EOres
    
            ## clear scene:
            rgl::clear3d()
            rgl::clear3d(type="bbox")
            rgl::clear3d(type="lights")
    
            ## setup env:
            rgl::bg3d(color="#DDDDDD")
            rgl::light3d()
    
            rgl::rgl.viewpoint(fov=fov)
    
            x <- 1:nrow(y)
            z <- 1:ncol(y)
            x <- (x-min(x))/(max(x)-min(x))
            y <- (y-min(y))/(max(y)-min(y))
            z <- (z-min(z))/(max(z)-min(z))
            rgl::rgl.surface(x, z, y, alpha=0.6, lit=TRUE, color="blue")
            rgl::rgl.lines(c(0,1), c(0,0), c(0,0), col=axis.col)
            rgl::rgl.lines(c(0,0), c(0,1), c(0,0), col=axis.col)
            rgl::rgl.lines(c(0,0),c(0,0), c(0,1), col=axis.col)
            rgl::rgl.texts(1,0,0, xlab, adj=1, col=text.col)
            rgl::rgl.texts(0,1,0, ylab, adj=1, col=text.col)
            rgl::rgl.texts(0,0,1, zlab, adj=1, col=text.col)
    
            ## add grid (credit's to John Fox scatter3d)
            xgridind <- round(seq(1, nrow(y), length=25))
            zgridind <- round(seq(1, ncol(y), length=25))
            rgl::rgl.surface(x[xgridind], z[zgridind], y[xgridind,zgridind],
                             color="darkgray", alpha=0.5, lit=TRUE,
                             front="lines", back="lines")
    
            ## animate (credit to rgl.viewpoint() example)
            start <- proc.time()[3]
            while ((i <- 36*(proc.time()[3]-start)) < 360) {
                rgl::rgl.viewpoint(i,i/8);
            }
        } else {
            message("Please install the 'rgl' package before using this function.")
        }
    }
    

    现在我们可以调用结果列表的元素,例如

    pos(EOres[[1]])  # value
    

    其他人也一样。

    【讨论】:

    • 谢谢!您通常建议定义一个新函数而不是覆盖吗?
    • 不,这只是为了举例。更重要的是,这是我将修复的错误。你在哪里看到过时的例子?
    • 我成功了,我的错在于价格而不是基础。
    • 是的,您的调用是错误的,但要修复的错误是需要移出函数的utils::globalVariables() 调用——这会导致您的主题中出现错误:。我这边有错误,我会修复它。
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2015-03-30
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多