我已經在環境中存儲了xts對象。我可以在存儲在環境中時對這些對象進行分類,即對其進行「就地」處理嗎?我可以通過參考他們的colname來提取這些對象嗎?從環境中獲取xts對象
下面是我所得到的一個例子。
# environment in which to store data
data <- new.env()
# Set data tickers of interest
tickers <- c("FEDFUNDS", "GDPPOT", "DGS10")
# import data from FRED database
library("quantmod")
dta <- getSymbols(tickers
, src = "FRED"
, env = data
, adjust = TRUE
)
但是,這會下載整個數據集。現在,我想丟棄一些數據,保存它,使用它(例如繪製它)。我想保留這個日期範圍內的數據:
# set dates of interest
date.start <- "2012-01-01"
date.end <- "2012-12-31"
我有兩個不同的目標。
- 到子集中的所有數據的環境中(無論是 作用就地或創建一個新的環境,並用它覆蓋 舊環境)。
- 只需要我選擇的一些代碼和子集, 說FEDFUNDS和DGS10,然後將它們保存在一個新的 環境中。我也想保留這些對象的xts-ness,所以我可以方便地將它們繪製在一起或分開。
這裏有一些事情我也能做到:
# extract and subset a single xts object
dtx1 <- data$FEDFUNDS
dtx1 <- dtx1[paste(date.start,date.end,sep="/")]
這種方法的缺點是,我需要的數據$後明確鍵入FEDFUNDS。但我想從預先確定的代理商列表中進行工作,例如
tickers2 <- c("FEDFUNDS", "DGS10")
我有一個更近了一步是通過組合功能系統得到與功能lapply
# extract xts objects as a list
dtxl <- lapply(tickers, get, envir = data)
但這返回一個列表。我不確定如何方便地使用這個列表來處理數據的子集,繪製數據等。我如何參考DGS10或tickers2中的一對代碼?
我非常想寫類似數據$行情[1]或數據$行情[[1]],但沒有奏效。我也嘗試過paste0('data','$',tickers [1])及其變化,有或沒有引號。無論如何,我認爲環境中的數據順序不是系統的,所以我真的更喜歡使用代號的名稱而不是索引,就像data $ tickers [colnames = FEDFUNDS]沒有一個本段的嘗試已奏效。
如果我的問題不清楚,我很抱歉,但請請求澄清。並感謝您的關注!
編輯:子集
我已經收到了一些精彩的建議。 GSee的答案有幾個非常有用的技巧。以下是如何在XTS對象感興趣的日期間隔內子集:
dates <- paste(date.start, date.end, sep="/")
as.environment(eapply(data, "[", dates))
'與'在處理環境時非常有用。 (data,FEDFUNDS [paste(date.start,date.end,sep =「/」)])' – GSee
Re:你最後一段,你在找'get(tickers [1],pos = data)' ? – GSee
謝謝Gsee。我嘗試過使用第一個構造,但是我沒有設法使用它來處理代理。我需要看看第二種方法,我不知道如何使用'pos'。無論如何,你在答案中給了我一些很好的方法。謝謝。 – PatrickT