Quantmod получить/просмотреть финансы в цикле

Я хотел бы просмотреть список тикеров, получить их финансовые данные и экспортировать их в файлы CSV в папке на моем рабочем столе. Однако у меня возникли проблемы с ошибкой в ​​R, связанной с viewFinancials() в пакете Quantmod. Код и ошибка показаны ниже.

И так, мой вопрос, как присвоить переменную как объект финансового класса, чтобы мой цикл работал правильно? Или, если у кого-то есть другой вариант, я был бы рад услышать его!

Вот сообщение об ошибке:

Ошибка в viewFinancials(co.f, "BS", "Q"): ‘x’ должен иметь тип ‘financials’

Вот код, над которым я работаю:

 tickers <- c('AAPL','ORCL','MSFT')

 for(i in 1:length(tickers)){

     co <- tickers[1]
     #co.f <- paste(co,".f",sep='') #First attempt, was worth a try

     co.f <- getFin(co, auto.assign=T)  # automatically assigns data to "co.f" object
     BS.q<-viewFinancials(co.f,'BS',"Q")  # quarterly balance sheet
     IS.q<-viewFinancials(co.f,"IS","Q")  # quarterly income statement
     CF.q<-viewFinancials(co.f,"CF","Q")  # quarterly cash flow statement
     BS<-viewFinancials(co.f,"BS","A")  # annual balance sheet
     IS<-viewFinancials(co.f,"IS","A")  # annual income statement
     CF<-viewFinancials(co.f,"CF","A")  # annual cash flow statement

     d<-Sys.Date()

     combinedA <- rbind(BS,IS,CF)
     combinedQ <- rbind(BS.q,IS.q,CF.q)

     BSAfile <- paste('/Users/dedwards/Desktop/RFinancials/',d,' ',co,'_BS_A.csv',sep='')
     BSQfile <- paste('/Users/dedwards/Desktop/RFinancials/',d,' ',co,'_BS_Q.csv',sep='')
     write.csv(combinedA, file = BSAfile, row.names=TRUE)
     write.csv(combinedQ, file = BSQfile, row.names=TRUE)
}

person Dedwards    schedule 13.07.2012    source источник
comment
Если вы хотите назначить данные co.f, вы должны использовать auto.assign=FALSE   -  person GSee    schedule 13.07.2012


Ответы (2)


co.f содержит имя объекта в рабочей области, которая фактически содержит финансовый объект. Чтобы на самом деле использовать этот объект, вам нужно вызвать get(co.f)

obj <- get(co.f)
# now you can use obj where you were previously trying to use co.f

В качестве альтернативы это выглядит

co.f <- getFin(co, auto.assign = FALSE)

также работает и, вероятно, более прямолинеен.

person Dason    schedule 13.07.2012

Вместо написания цикла вы можете рассмотреть пакет tidyquant, который позволяет передавать несколько акций в функцию tq_get(). Установка tq_get(get = "financials") позволит вам загружать финансовые показатели для нескольких акций. Вот и пример:

library(tidyquant)
c("FB", "AMZN", "NFLX", "GOOG") %>%
    tq_get(get = "financials")

Это возвращает вложенный фрейм данных всех данных финансового отчета (отчет о прибылях и убытках, балансовый отчет, движение денежных средств) как за годовой, так и за квартальный периоды. Вы можете использовать функцию unnest(), чтобы отделить слои.

Если вам нужно сохранить данные, вы можете распаковать их, а затем записать в csv, используя функцию write_csv().

person Matt Dancho    schedule 05.03.2017