我有以下代码,其目的是下载选择的股票,然后计算这些股票的月度回报。在我使用lapply
函数之前,一切正常。此示例为每个股票返回相同的结果。其他尝试也是错误的
NB符号也可以像symbols <- c("AAPL", "GOOG", "GE")
tickerlist <- "sp5001.csv" #CSV containing tickers on rows
startDate = as.Date("2013-10-01") #Specify what date to get the prices from
endDate = as.Date("2016-09-30")
stocksLst <- read.csv("sp5001.csv", header = F, stringsAsFactors = F)
symbols <- read.csv("sp5001.csv", header = F)$V1
symbols <-as.character(symbols)
nrstocks = length(stocksLst[,1])
data.env <- new.env()
getSymbols(symbols, env = data.env ,from= startDate ,to= endDate)
dataX <-do.call(merge, eapply(data.env, Ad)[symbols])
Temp <- lapply(symbols, function(symbols) {monthlyReturn(dataX)})
What_I_need <- do.call(merge.xts,Temp)
What_I_need
data.frame / xts看起来像这样 - 这是错误的。
monthly.returns monthly.returns.1 monthly.returns.2
2013-10-31 0.071194294 0.071194294 0.071194294
2013-11-29 0.070052705 0.070052705 0.070052705
2013-12-31 0.008901793 0.008901793 0.008901793
2014-01-31 -0.107696737 -0.107696737 -0.107696737
答案 0 :(得分:2)
如果您将创建变量Temp
的行更改为:
Temp <- lapply(1:length(symbols), function(x) {monthlyReturn(dataX[,x])})
它有效。
我认为更容易维护,更灵活的方法来进行这种计算(同时保留正确的列名)是使用包qmao
(find it here),它有2个非常有用函数PF
和RF
代表PriceFrame
和ReturnFrame
。即。
library(qmao)
symbols <- c('AAPL','AMZN')
data.env <- new.env()
getSymbols(symbols, env = data.env ,from= startDate ,to= endDate)
pf <- PF(symbols,env = data.env,silent=TRUE) # consolidated xts-object
pfMth <- pf[endpoints(pf,on='months'),] # get monthly endpoints
pfMthRets <- ROC(pfMth,type='discrete')
tail(pfMthRets)
AAPL AMZN
2016-04-29 -0.13992110 0.111094283
2016-05-31 0.07177292 0.095817020
2016-06-30 -0.04265974 -0.009919871
2016-07-29 0.09006276 0.060353265
2016-08-31 0.02365190 0.013639745
2016-09-30 0.06550429 0.088603187