R运行pblapply报match.fun(FUN)参数FUN缺失无默认值问题求助
报错原因分析
- 核心错误来自
pblapply函数的参数缺失:pblapply是带进度条的lapply扩展函数,要求必须传入两个必填参数,第一个是待遍历的对象,第二个是对每个遍历元素执行的处理函数FUN,你当前的代码仅传入了待遍历的ticker列表,没有指定FUN参数,因此触发argument "FUN" is missing报错。 - 附加语法错误:你写的
rbindlist行末尾多了一个多余的右括号,即使解决了FUN缺失问题,这行也会抛出语法报错。
修复方案
- 第一步:先定义你需要的单只股票指标计算函数,函数输入为单个ticker代码,输出为计算完指标的该ticker行情数据,示例代码如下(可根据你实际需要的指标替换内部计算逻辑):
# 单只股票指标计算自定义函数 calc_stock_indicators <- function(cur_ticker) { # 提取当前ticker的全部行情数据 cur_data <- df[df$ticker == cur_ticker, ] # 转换为xts格式适配TTR/quantmod的指标函数 cur_xts <- xts( x = cur_data[, c("price.open", "price.high", "price.low", "price.adjusted", "volume")], order.by = as.Date(cur_data$ref.date) ) # 示例:计算常用技术指标,可自行增删修改 cur_data$RSI_14 <- RSI(Cl(cur_xts), n = 14) macd_res <- MACD(Cl(cur_xts), nFast = 12, nSlow = 26, nSig = 9) cur_data$MACD <- macd_res[, 1] cur_data$MACD_SIGNAL <- macd_res[, 2] cur_data$MA_5 <- SMA(Cl(cur_xts), n = 5) cur_data$MA_20 <- SMA(Cl(cur_xts), n = 20) cur_data$BOLL_MID <- BBands(Cl(cur_xts))[, "mavg"] return(cur_data) }
- 第二步:补全
pblapply的FUN参数,传入上面定义的指标计算函数:
## 遍历每个ticker计算指标 df <- pblapply(as.list(unique(df$tickers)), FUN = calc_stock_indicators)
- 第三步:删除
rbindlist行多余的右括号,修正语法:
## 合并所有ticker的计算结果 df <- rbindlist(df, use.names = TRUE)
额外优化建议
你定义的tickers向量中存在重复值^NSEMDCP50,会导致重复下载同一只标的的行情数据,建议提前去重:
tickers <- unique(c("^NSEI","^NSEMDCP50","^NSEMDCP50","NIFTYSMLCAP50.NS","^CNX100"))
内容的提问来源于stack exchange,提问作者Brownnboi
相关产品推荐
相关产品推荐

