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

如何在map_df()中指定列并应用prettyNum函数?

修正方法详解

你的问题出在mutate_at的使用方式上——直接在.funs里调用prettyNum时,.的指代对象搞错了,而且.funs需要接收函数(或函数表达式),不是直接执行函数的结果。下面给你两种可行的修正方案:

方案1:使用mutate_at(兼容旧版tidyverse)

把map_df去掉,直接在mutate_at里用lambda表达式指定函数逻辑,这里的.会正确指代每一列的数值:

test <- mtcars %>% 
  mutate_at(vars(drat, wt), ~prettyNum(., big.mark = ".", decimal.mark = ","))

方案2:使用across(tidyverse 1.0.0+推荐写法)

现在tidyverse更推荐用across来替代mutate_at这类作用域动词,写法更清晰灵活,有两种方式:

方式A:lambda表达式

test <- mtcars %>% 
  mutate(across(c(drat, wt), ~prettyNum(., big.mark = ".", decimal.mark = ",")))

方式B:直接传递函数和参数

因为prettyNum的第一个参数就是要处理的数值,我们可以直接把函数和后续参数传给across,不用写lambda:

test <- mtcars %>% 
  mutate(across(c(drat, wt), prettyNum, big.mark = ".", decimal.mark = ","))

这两种方案都会只对drat和wt列应用prettyNum格式处理,其他列保持原样,最终返回完整的数据框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:20:51