2013-10-20 44 views
0

我有以下代码从类term_strc_nss中提取一个命名数字。它可以很好地提取beta矢量的值并将它们传递给下一个函数。但是,交易日期是2012-12-31并定义了该类中的插槽更改。所以,我需要将交易日期作为变量传递给代码。在R中使用粘贴来连接命令

BetaVector <<- unname(term.structure$opt_result$`2012-12-31`$par[c("beta0", 
"beta1","beta2", "tau1")]) 

下面的代码使用粘贴,但是当我运行的功能我得到的似乎围绕“beta0”,“β1的”,“β2”和“TAU1”是相关的引号的错误。我尝试了“与”我可以运行的代码,但随后并没有传递的值,因为测试向量仅仅是一个名称的字符串替换。

BetaVector <<- paste("unname(term.structure$opt_result$`",tradedate,"`$par[c("beta0", 
"beta1", "beta2", "tau1")])") 

我想我可以创建一个方法来提取贝塔系数,但在创建方法时,我仍然会遇到同样的问题。是否有更好的方法从类中提取一个已命名的数字?

这里是来自term.structure的dput。term.structure是一个对象termstrc_nss并且是一个S3级什么是正确的方法来参考它?

structure(list(`2012-12-31` = structure(list(par = structure(c(3.41273726187976, 
-2.63342593294169, -5.34244663887461, 2.13363495349724), .Names = c("beta0", 
"beta1", "beta2", "tau1")), value = 0.0088680383803467, counts = structure(c(15, 
10), .Names = c("function", "gradient")), convergence = 0L, message = NULL, 
outer.iterations = 2L, barrier.value = -0.000409627261066452), .Names = c("par", 
"value", "counts", "convergence", "message", "outer.iterations", 
"barrier.value"))), .Names = "2012-12-31") 
+1

Post'dput(term.structure $ opt_result)',请不要在没有引用S4结构时使用术语'slot'。在这个问题上有很多不明确的地方,如果你没有符合文本描述和问题的代码和数据,你就有可能吸引近距离投票。 –

+0

这个问题的答案似乎是逃避你的引号:'\“'。 – Thomas

回答

4

这听起来像你想做某种评估分析技术。这几乎总是一个坏主意,因为它使你的代码几乎不可能调试。改用方括号索引。

trade_date <- "2012-12-31" 
BetaVector <<- unname(
    term.structure$opt_result[[trade_date]]$par[c("beta0","beta1","beta2", "tau1")] 
) 
+0

感谢Richie,我用了term.structure $ opt_result [[1]] $ par [c(”beta0“,”beta1“,”beta2“ ,“tau1”)]。这是有效的,我想我可以在整个班级中做到这一点,我将不得不考虑一种控制方式来确保我抓住正确的输出 - 但是这让我继续前进。 –