我创建了一个 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...
一种选择是使用
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
最后两次调用失败,因为
myFunc
需要三个向量,而不是零参数或单个 data.frame。
您可以更改它,通过给它一个接收数据代词的参数来使最后一次调用起作用
.data
:
myFunc <- function(x) x$a * x$b ^ x$c
tbl |> rowwise() |> mutate(myFunc(.data))