2015-12-26 2 views
0

Hy,R - Для цикла и применить функцию (Quantmod)

У меня есть этот кадр данных, я хочу загрузить данные из Yahoo и Вычислить процентное изменение (функция Delt в Quantmod)

View(Equity) 

    Symbol 
1  A 
2  AA 
3 AAC 

I сделал цикл

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" 

, как я могу это исправить?

Благодаря

ответ

1

Это происходит потому, что EquityDF еще характер. Для того, чтобы получить соответствующие данные вы должны использовать получить: 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)}) 
+0

thks @wici, он работает :) Если я сделаю то же самое для k = 2, как я могу присоединиться к спискам? (для примера Delt и Delt2)? Delt2 <- lapply (mget (Equity [, 1]), функция (y) { применяется (y [, 1: 5], 2, функция (x) Delt (x, k = 2) * 100)}) – Kardu

+0

Каков ваш ожидаемый результат объединенных списков? возможно, вы имеете в виду это 'mapply (list, Delt, Delt2, SIMPLIFY = FALSE)'? – wici

+0

Вы правы :) большое спасибо wici. – Kardu

Смежные вопросы