我已经在环境中存储了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