quantmod与tidyquant获取财务数据失败,请求协助排查问题
我刚复现了你的问题——不管是用tidyquant::tq_get("AAPL", get = "financials")还是quantmod::getFin("AAPL"),都会触发你提到的NA/NaN argument错误,前者返回NA加警告,后者直接报错。
问题根源
这两个函数的底层都是依赖Google Finance的网页结构来抓取财务数据,但Google Finance在近期调整了页面的HTML布局,导致这两个包内置的网页解析逻辑(尤其是定位表格表头的thead索引逻辑)完全失效,找不到正确的数据位置,从而抛出索引错误。
可行的替代方案
既然Google Finance的数据源已经不可用,推荐改用更稳定的数据源和对应的R包函数:
方案1:用tidyquant对接Yahoo Finance
你可以放弃get="financials"这个旧参数,改用tidyquant中针对Yahoo Finance的专用参数来获取三大报表:library(tidyquant) # 获取季度资产负债表 aapl_bs <- tq_get("AAPL", get = "balance_sheet", periodicity = "quarter") # 获取季度利润表 aapl_is <- tq_get("AAPL", get = "income_statement", periodicity = "quarter") # 获取季度现金流量表 aapl_cf <- tq_get("AAPL", get = "cash_flow", periodicity = "quarter")Yahoo Finance的接口目前维护得更稳定,数据更新也及时。
方案2:用quantmod的官方替代函数
quantmod自带的getFinancials()函数(注意和getFin()区分)默认对接Yahoo Finance,能正常获取数据:library(quantmod) aapl_fin_data <- getFinancials("AAPL", src = "yahoo") # 查看季度资产负债表 viewFinancials(aapl_fin_data, "BS", "Q") # 查看季度利润表 viewFinancials(aapl_fin_data, "IS", "Q")方案3:抓取SEC官方披露数据(更权威)
如果需要最权威的上市公司财务数据,可以用finreportr包直接从SEC的EDGAR数据库抓取10-K/10-Q报表:library(finreportr) # AAPL的CIK代码是0000320193 aapl_10q <- getFilings(cik = "0000320193", form.type = "10-Q", filing.year = 2024)
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

