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

如何用mutate按行调用自定义函数,无需显式指定参数?

解决方法:自动匹配列名与函数参数

当你的tibble列名和函数参数完全对应(不管顺序),可以用以下几种方法避免逐个指定参数:

方法1:使用pmap系列函数(推荐)

pmap会自动按列名匹配函数参数,逐行传递数据,无需手动指定:

library(tidyverse)

myFunc <- function(a, b, c) a*b^c
tbl <- tibble(b = 2:6, a = 1:5, c = -1:3)

tbl |> 
  mutate(result = pmap_dbl(., myFunc))

pmap_dbl用于接收函数返回的数值型结果,如果函数返回其他类型,可以用pmap或对应类型的pmap_*函数(比如pmap_chr)。

方法2:结合rowwise与do.call

在按行分组后,用do.call把当前行的所有列作为参数传递给函数:

tbl |> 
  rowwise() |> 
  mutate(result = do.call(myFunc, across(everything()))) |> 
  ungroup()

across(everything())会提取当前行的所有列并转为列表,do.call则用这个列表作为参数调用myFunc。

为什么之前的尝试失败?

  • myFunc():没有传递任何参数,函数需要a/b/c三个参数,必然报错。
  • myFunc(.data):.data代表整个tibble对象,会被当作单个参数传给myFunc的第一个参数a,类型不匹配导致错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:55:00