【问题标题】:R - For Cycle and Apply function (Quantmod)R - 用于循环和应用功能 (Quantmod)
【发布时间】:2015-12-27 04:19:07
【问题描述】:

喂,

我有这个数据框,我想从 Yahoo 下载数据并计算百分比变化(Quantmod 中的 Delt 函数)

View(Equity)

  Symbol
1      A
2     AA
3    AAC 

我做了一个循环

m<-nrow(Equity)

for (i in 1:m) {

   EquityDF <- Equity[i,]
   Data<-getSymbols(EquityDF,src="yahoo")
   Delt[i]<-apply(EquityDF[,1:5], 2, function(x) Delt(x, k=1)*100)

}

但是我收到了这个错误

Error in EquityDF[, 1:5] : incorrect number of dimensions

我知道为什么会出现这个错误,因为如果我犯了

EquityDF

它的输出

"A"

我该如何解决这个问题?

谢谢

【问题讨论】:

    标签: r quantmod


    【解决方案1】:

    这是因为EquityDF 仍然是一个字符。要检索相应的数据,您必须使用 get:get(EquityDF)[, 1:5]

    另外,我建议只调用一次getSymbols,以便您在一次调用中检索所有需要的数据,因此您的代码可以简化为:

    Equity <- data.frame(Symbol = c("A","AA","AAC"), stringsAsFactors = FALSE)
    getSymbols(Equity[, 1], src="yahoo")
    Delt <- lapply(mget(Equity[, 1]), function(y){
               apply(y[, 1:5], 2, function(x) Delt(x, k=1)*100)})
    

    【讨论】:

    • thks @wici,它正在工作:) 如果我对 k=2 做同样的事情,我该如何加入列表? (例如 Delt 和 Delt2)? Delt2
    • 您对加入列表的预期输出是什么?也许你的意思是mapply(list, Delt,Delt2, SIMPLIFY = FALSE)
    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多