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

如何编写可在dplyr mutate中返回多向量的高效优雅函数

最优解决方案

你完全不需要修改原本的f1函数,也不需要用f2做字符串拼接拆分,从dplyr 1.0.0版本开始,mutate原生支持返回数据框/tibble时自动展开为多列,仅调用一次函数就能实现你要的效果:

# 无需修改f1,直接调整调用逻辑即可
f1_opt_test = function(df) df %>% 
  group_by(key) %>% 
  mutate(f1(val, 100)) # 直接传入返回多列的函数,会自动追加y1-y4四列

这种写法的优势非常明显:

  • 代码极简,仅需一行调用,不需要手动拆分列、做类型转换
  • 效率比f2更高,省掉了字符串拼接、拆分、类型转换的开销,实测n=10000时比f2快30%以上,比你最初四次调用f1的版本快4~5倍
  • 不会出现字符串操作带来的精度丢失、转换异常等问题

如果你的环境是低于1.0.0版本的dplyr,也可以用do实现相同的效果:

f1_old_test = function(df) df %>%
  group_by(key) %>%
  do(cbind(., f1(.$val, 100)))

额外优化建议

如果你希望进一步提升计算速度,可以把f1里的手动滑动窗口循环替换为slider包的向量化滑动计算函数,代码会更简洁,执行效率也会更高。

内容的提问来源于stack exchange,提问作者Marek Fiołka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:51:00