通过for循环创建空xts对象

通过for循环创建空xts对象,r,for-loop,xts,quantmod,R,For Loop,Xts,Quantmod,我试图通过for循环创建一系列空xts对象,但失败了 我已经创建了一个名为SYMBOL_vector的字符向量,其中包含我希望创建的空XTS对象的名称。我还使用getSymbols下载了一些股票市场数据,包括symbol SPY的数据。因此,存在一个名为SPY的XTS对象 我的for循环代码是: for (i in 1 : length(SYMBOL_vector)) { SYMBOL_vector[i] <- as.xts(order.by = index(SPY)) } for(

我试图通过for循环创建一系列空xts对象,但失败了

我已经创建了一个名为SYMBOL_vector的字符向量,其中包含我希望创建的空XTS对象的名称。我还使用getSymbols下载了一些股票市场数据,包括symbol SPY的数据。因此,存在一个名为SPY的XTS对象

我的for循环代码是:

for (i in 1 : length(SYMBOL_vector)) {
  SYMBOL_vector[i] <- as.xts(order.by = index(SPY))
}
for(1中的i:长度(符号_向量)){

SYMBOL_vector[i]@PHXtrader您试图做的是用xts对象替换字符向量中的元素,而xts对象不是您想要做的,也没有意义。要为名称赋值,您必须使用'assign'函数(?assign以获取更多信息)。代码中的另一个错误是使用“as.xts”而不是仅使用“xts”。请看以下示例:

tickers <- c("AMZN","AAPL")          # this is a character object
getSymbols("SPY",from="2013-09-01")  # this is a xts object

for (i in 1:length(tickers)) {
  assign(tickers[i],xts(order.by = index(SPY)))
}
我认为更好、更安全的方法是使用列表(或者有时创建一个新环境)来完成您想要做的事情。如上所述创建对象会导致很难找到和调试的错误,这些类型的构造会导致意外覆盖变量和许多其他潜在错误。以下示例避免循环并在列表中创建空对象:

tickers <- c("AMZN","AAPL") 
mylist <- rep(as.list(xts(order.by = index(SPY))),2) # creates 2 empty xts-objects in list 
names(mylist) <- tickers

> str(mylist)
List of 2
 $ AMZN:An 'xts' object of zero-width
 $ AAPL:An 'xts' object of zero-width

tickers如果您只是使用
xts
而不是
as.xts
,那么您的代码应该可以工作,但是,它并不是真正的“R方式”(或“quantmod方式”)来解决问题

考虑这一点:

library(quantmod)
s <- c("SPY", "DIA", "QQQ")
e <- new.env() # an empty environment to hold yahoo price data
getSymbols(s, env=e)
L <- eapply(e, dailyReturn) # a list of returns
L$SPY
library(quantmod)
s <- c("SPY", "DIA", "QQQ")
e <- new.env() # an empty environment to hold yahoo price data
getSymbols(s, env=e)
L <- eapply(e, dailyReturn) # a list of returns
L$SPY
ret <- as.environment(L) # an environment with xts objects of daily returns
ls(ret)
get("DIA", pos=ret)
attach(ret)  # not recommended
head(QQQ)
#           daily.returns
#2007-01-03 -0.0050621261
#2007-01-04  0.0189639223
#2007-01-05 -0.0047662279
#2007-01-08  0.0006841505
#2007-01-09  0.0050136737
#2007-01-10  0.0117913832