将结果附加到列表中

时间:2016-11-15 01:40:15

标签: r append lapply quantmod yahoo-finance

我有以下代码通过CAPM成功计算beta,通过使用lapply获取股票列表。但是,我希望在每个库存通过模型后,将回归系数(beta)附加到单独的列表中(或从capm列表中提取它们)。我的问题是append在我的lapply函数中不起作用。我希望datalist列表具有系数。

library(qmao)
library(broom)

startDate = as.Date("2013-10-01") #Specify what date to get the prices from
endDate = as.Date("2016-09-30")

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')  
pfMthRets <- na.omit(pfMthRets)

tail(pfMthRets)
plot(pfMthRets$AAPL)

getSymbols("^gspc",from = startDate, to = endDate)
GSPC_Adjusted = GSPC$GSPC.Adjusted
GSPC.mrtn <- monthlyReturn(GSPC$GSPC.Adjusted)
GSPC.mrtn <- GSPC.mrtn [-1,]
names(GSPC.mrtn)[1] <- "SP"

datalist = list()
lapply(symbols, function(symbols) {
input <- as.formula(paste("pfMthRets$",symbols, "~ GSPC.mrtn$SP" ))
capm <- lm( input)
datalist <- append(datalist, coefficients(capm))
})

1 个答案:

答案 0 :(得分:1)

请改为尝试:

res <- lapply(symbols, function(symbols) {
    input <- as.formula(paste("pfMthRets$",symbols, "~ GSPC.mrtn$SP" ))
    capm <- lm( input)
    coefficients(capm)
})

res2 <- do.call(rbind, res)

# > res2
# (Intercept) GSPC.mrtn$SP
# [1,] 0.006102159     1.523730
# [2,] 0.017761587     1.509065

您的问题出现是因为在lapplydatalist,当您在符号中循环时,datalist不会附加结果(在您的函数的每次调用中,rbind都是一个空列表)。你想&#34;结合&#34; (lapplydo.call次操作的结果。一种常见的方法是使用{{1}}。