使用列名称应用函数 rowwise() 来使用 mutate() 识别函数参数

问题描述 投票:0回答:2

我创建了一个 tibble,其中每列的命名都与自定义函数的参数相对应。 有很多列,因此我试图避免显式调用和分配每个参数。 我一直盲目地尝试不同的语法但无济于事。 如果有人可以帮助我,我将不胜感激。

这是 MWE:

# Define simple function
myFunc <- function(a, b, c) a*b^c

# Create tibble of parameters (intentionally out of order)
tbl <- tibble(b = 2:6, a = 1:5, c = -1:3)

# Apply function by listing columns explicitly
tbl |> rowwise() |> mutate(myFunc(a = a, b= b, c=c))

# Fail to apply function...
tbl |> rowwise() |> mutate(myFunc())

# Fail again...
tbl |> rowwise() |> mutate(myFunc(.data))
# Continue ad nauseum...

r tidyr tibble mutate rowwise
2个回答
0
投票

一种选择是使用

purrr::pmap
函数系列,例如使用
pmap_dbl
你可以这样做:

myFunc <- function(a, b, c) a * b^c

library(dplyr, warn.conflicts = FALSE)
library(purrr)

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

tbl %>%
  mutate(res = pmap_dbl(., myFunc))
#> # A tibble: 5 × 4
#>       b     a     c    res
#>   <int> <int> <int>  <dbl>
#> 1     2     1    -1    0.5
#> 2     3     2     0    2  
#> 3     4     3     1   12  
#> 4     5     4     2  100  
#> 5     6     5     3 1080

0
投票

最后两次调用失败,因为

myFunc
需要三个向量,而不是零参数或单个 data.frame。

您可以更改它,通过给它一个接收数据代词的参数来使最后一次调用起作用

.data
:

myFunc <- function(x) x$a * x$b ^ x$c

tbl |> rowwise() |> mutate(myFunc(.data))
© www.soinside.com 2019 - 2024. All rights reserved.