You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R使用md_stock获取股票数据后调用ROC函数报错如何解决?

问题根因

你调用md_stock()从163源获取的股票数据中,价格类字段默认返回字符类型(部分场景带千位分隔符等特殊标识),直接生成xts对象时未做类型转换,导致数值计算类函数无法执行。

修复方案

前置依赖补充

首先确保加载xts和TTR包(ROC()函数来自TTR包):

library(xts)
library(TTR)

代码修改示例

在原有逻辑基础上,对目标价格列做数值转换后再生成xts对象即可:

library(pedquant)
library(xts)
library(TTR)

tickers = c('000858', '600887', '000651', '600176')
port = md_stock(tickers, from = "2003-01-01", source = "163")

# 对目标列做数值转换后生成xts对象
stock1 = xts(as.numeric(port[["000858"]][,7]), order.by = port[["000858"]][["date"]])

# 运行ROC计算
ROC(stock1, type = "discrete")
可选优化
  • 转换时如果出现NA值,说明原始数据存在千位分隔符等特殊字符,可先清洗再转换:
    # 先移除逗号分隔符再转数值
    price_col = as.numeric(gsub(",", "", port[["000858"]][,7]))
    stock1 = xts(price_col, order.by = port[["000858"]][["date"]])
    
  • 建议按列名取数替代按列索引取数,避免源数据列顺序调整后逻辑报错,比如收盘价字段为close时,写法调整为:
    stock1 = xts(as.numeric(port[["000858"]]$close), order.by = port[["000858"]]$date)
    

内容的提问来源于stack exchange,提问作者irationalpig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:18:02