2012-07-13 41 views
0

我想循环查看代码清单,获取财务数据并将它们导出到我桌面上的文件夹中的CSV文件。但是,我一直遇到与Quantmod包中的viewFinancials()有关的R中的错误。代码和错误如下所示。Quantmod获取/查看循环中的财务报告

所以,我的问题是如何分配一个变量作为类财务的对象,以便我的循环正常运行?或者如果有人有另一种选择,我会很高兴听到它!

以下是错误消息:

错误viewFinancials(co.f, “BS”, “Q”): 'x' 的类型必须是 '财务'

这里是我工作的代码:

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) 
} 
+0

如果你想分配数据到'co.f',那么你必须使用'auto.assign = FALSE' – GSee 2012-07-13 17:42:28

回答

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) 

也可行,可能更直截了当。

+0

谢谢!现在就开始运行 – Dedwards 2012-07-13 17:35:42

0

您可能会考虑使用tidyquant包来使多个库存被传递给tq_get()函数,而不是编写循环。设置tq_get(get = "financials")将允许您下载多个股票的财务数据。下面是和示例:

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

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

如果您需要保存数据,则可以使用write_csv()函数将其写入csv。