0

我想循环浏览一个代码列表,获取他们的财务数据并将它们导出到我桌面上文件夹中的 CSV 文件。但是,我遇到了与 Quantmod 包中的 viewFinancials() 相关的 R 错误。代码和错误如下所示。

所以,我的问题是如何将变量分配为金融类的对象,以便我的循环正常运行?或者,如果有人有其他选择,我会很高兴听到它!

这是错误消息:

viewFinancials 中的错误(co.f、“BS”、“Q”):“x”必须是“财务”类型</p>

这是我正在处理的代码:

 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)
}
4

2 回答 2

1

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)

也有效,可能更直接。

于 2012-07-13T17:25:12.253 回答
0

tidyquant您可以考虑将多个股票传递给tq_get()函数的包,而不是编写循环。设置tq_get(get = "financials")将允许您下载多只股票的财务数据。这是和示例:

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

这将返回年度和季度期间所有财务报表数据(损益表、资产负债表、现金流量)的嵌套数据框。您可以使用该unnest()功能剥离图层。

write_csv()如果您需要保存数据,您可以取消嵌套然后使用该函数写入 csv 。

于 2017-03-05T03:44:00.670 回答