如何让R自定义函数支持管道操作,分组计算股票日收益率
问题原因与解决方案
报错原因
- 你自定义的
dailyReturn函数仅设计为接收1个数值向量参数,而你使用管道时,默认会将左侧的分组数据框作为第一个参数传入函数,同时你额外传入了prccd参数,相当于给函数传入了2个不匹配的参数,因此触发unused argument报错。 - 对dplyr分组数据框的列进行计算、生成新列时,必须通过
mutate()函数操作,不能直接将整个数据框传入仅接受向量的自定义函数。
修复代码
直接调整管道逻辑,在mutate内调用自定义函数传入收盘价列即可:
library(dplyr) # 先确认你的数据已经按交易日期升序排序,如果有日期列datadate建议先加排序步骤 mod_stock_data <- mod_stock_data %>% group_by(gvkey, iid) %>% # 按分组内的交易日期排序,保证lag取到的是上一个交易日的收盘价 arrange(datadate, .by_group = TRUE) %>% mutate(daily_return = dailyReturn(prccd)) %>% ungroup()
可选优化
如果不需要复用dailyReturn函数,也可以直接把逻辑写在mutate里,省略自定义函数:
mod_stock_data <- mod_stock_data %>% group_by(gvkey, iid) %>% arrange(datadate, .by_group = TRUE) %>% mutate(daily_return = prccd / lag(prccd, 1) - 1) %>% ungroup()
内容的提问来源于stack exchange,提问作者deadlock
相关产品推荐
相关产品推荐

