2013-10-20 76 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」)]。這是有效的,我想我可以在整個班級中做到這一點,我將不得不考慮一種控制方式來確保我抓住正確的輸出 - 但是這讓我繼續前進。 –