我可能没有在标题中清楚地解释我的问题,抱歉。
这是代码的问题,它会更清楚,
library(zoo);library(quantmod)
stockData <- new.env()#Make a new environment for quantmod to store data in
startDate = as.Date("2006-12-29") #Specify period of time we are interested in
endDate = as.Date("2012-12-31")
monthlyStartDate = as.Date("2007-01-01")
# tickers <- c("AAPL","GOOG", "IBM")
tickers <- c("AAPL","GOOG", "IBM", "MSFT", "INTC", "YHOO", "F", "GS", "UL")
# The tickers vector could be even larger, i.e. 50 stocks
stockData$AAPL.ret=diff(log(stockData$AAPL$AAPL.Adjusted)) # Compute log returns
stockData$GOOG.ret=diff(log(stockData$GOOG$GOOG.Adjusted)) # Compute log returns
stockData$IBM.ret=diff(log(stockData$IBM$IBM.Adjusted)) # Compute log returns
head(stockData$GOOG.ret)
head(stockData$GOOG$GOOG.Adjusted)
AAPLmonthly<-aggregate.zoo(stockData$AAPL.ret[2:nrow(stockData$AAPL$AAPL.Adjusted),],as.yearmon,sum)
GOOGmonthly<-aggregate.zoo(stockData$GOOG.ret[2:nrow(stockData$GOOG$GOOG.Adjusted),],as.yearmon,sum)
IBMmonthly<-aggregate.zoo(stockData$IBM.ret[2:nrow(stockData$IBM$IBM.Adjusted),],as.yearmon,sum)
head(AAPLmonthly)
stockret = cbind(AAPLmonthly, GOOGmonthly, IBMmonthly)
head(stockret)
上面的代码只用了 3
tickers
例如,我想知道如何做 loop
在 R 中,使我的整个代码向量变成 stockret
zoo
对象,有人可以帮助我吗?非常感激。我正在学习环境,刚刚了解到函数是一个闭包,包括主体、参数及其环境,但我不知道我们可以新建一个环境。所以我被困在这里,
stockData$AAPL.ret
我该如何放置 stockData$
在我的每个元素前面做一个循环来分配值?我应该使用 "["
去做这个?此外,如果我使用
assign
在代码中执行此操作的函数stockData$AAPL.ret=diff(log(stockData$AAPL$AAPL.Adjusted)) # Compute log returns
如何做到这一点,我只是对如何做到这一点感到困惑
stockData$AAPL$AAPL.Adjusted
我的 assign
中的一个更一般的论点功能,任何示例将不胜感激!
最佳答案
您可以使用 get
从环境中获取数据和 assign
将数据分配给环境中的符号。
library(quantmod)
stockData <- new.env()
tickers <- c("AAPL","GOOG", "IBM", "MSFT", "INTC", "YHOO", "F", "GS", "UL")
getSymbols(tickers, src="yahoo", env=stockData)
for (tick in tickers) {
x <- get(tick, pos=stockData) # get data from stockData environment
x$ret <- diff(log(Ad(x))) # add a column with returns
assign(tick, x, pos=stockData) # assign back into stockData environment
assign(paste0(tick, "monthly"),
apply.monthly(x, sum, na.rm=TRUE),
pos=stockData) # calc monthly sum and assign in stockData environment
}
或者,您可以使用 eapply 将函数应用于环境中的每个对象
结果将是一个您可以强制回到环境的列表
stockData <- as.environment(eapply(stockData, function(x) {
x$ret <- diff(log(Ad(x)))
x
}))
或者您可以创建一个仅包含返回值的列表,然后遍历该列表
计算每月总和
R <- eapply(stockData, function(x) diff(log(Ad(x))))
monthly <- lapply(R, apply.monthly, sum, na.rm=TRUE)
您可以像这样将结果合并到单个对象中
do.call(merge, R)
do.call(merge, monthly)
关于r - 在 R 中并行处理多个 quant mod 股票代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21196593/