R中函数传入向量而非单个值时出错的技术问询
解决批量计算PAFPM2.5的参数错误问题
核心问题
报错Error in PAF.summary(...) : unused arguments (...)的直接原因是你调用函数时传入的参数名,和PAF.summary函数定义的参数名不匹配。比如函数定义的参数是RR.low、RR.up、RR.est,但你调用时用了low=、up=、est=,R会判定这些参数未被函数定义,因此报错。
修复步骤
1. 核对参数名,修正调用方式
先查看函数的定义(运行print(PAF.summary)),确认形参名称。假设函数定义是:
PAF.summary <- function(RR.low, RR.up, RR.est) { # 你的PAF计算逻辑 }
那调用时必须使用对应参数名:
PAF.summary(RR.low = sectors$RR.low, RR.up = sectors$RR.up, RR.est = sectors$RR.est)
2. 确保函数支持向量输入
如果参数名匹配后仍报错,说明函数本身只处理单个值,未做向量化适配。可以用两种方式解决:
- 快速包装:用
Vectorize()
把原函数包装成支持向量输入的版本:PAF.summary_vec <- Vectorize(PAF.summary) # 调用包装后的函数 batch_result <- PAF.summary_vec(RR.low = sectors$RR.low, RR.up = sectors$RR.up, RR.est = sectors$RR.est) - 逐元素处理:用
purrr::pmap
如果函数逻辑复杂,Vectorize()不适用,用pmap逐行传入参数:library(purrr) batch_result <- pmap(list(sectors$RR.low, sectors$RR.up, sectors$RR.est), PAF.summary)
3. 小批量测试验证
先取少量数据测试,确认逻辑正确后再跑全量:
# 测试前3组数据 test_result <- PAF.summary(RR.low = sectors$RR.low[1:3], RR.up = sectors$RR.up[1:3], RR.est = sectors$RR.est[1:3])
内容的提问来源于stack exchange,提问作者bram
相关产品推荐
相关产品推荐

