如何使用dplyr管道将额外参数传递给purrr :: map

sca*_*der 3 r tidyverse

我有以下数据框和功能:

param_df <- data.frame(
  x = 1:3 + 0.1,
  y = 3:1 - 0.2
)


param_df
#>     x   y
#> 1 1.1 2.8
#> 2 2.1 1.8
#> 3 3.1 0.8

my_function <- function(x, y, z) {
  x + y + z
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是通过param_dfmy_function功能,但与不包含额外的参数param_df,比方说z=3

我尝试了这个但是失败了:

library(tidyverse)
param_df %>% 
  purrr::map(my_function, z =3 )
Run Code Online (Sandbox Code Playgroud)
Error in .f(.x[[i]], ...) : argument "y" is missing, with no default
Run Code Online (Sandbox Code Playgroud)

预期结果是一个包含三个值的列表:全部6.9

我知道我可以插入3param_df作为额外的列z。但这不是我想要的。因为实际上,函数并z 执行更复杂的计算。

我该怎么办?

Ant*_*osK 6

library(tidyverse)

param_df <- data.frame(
  x = 1:3 + 0.1,
  y = 3:1 - 0.2
)

my_function <- function(x, y, z) {
  x + y + z
}

param_df %>% pmap(~my_function(.x,.y,3))

# [[1]]
# [1] 6.9
# 
# [[2]]
# [1] 6.9
# 
# [[3]]
# [1] 6.9
Run Code Online (Sandbox Code Playgroud)

另一个解决方案可能是:

map2(param_df$x, param_df$y, ~my_function(.x,.y,3))
Run Code Online (Sandbox Code Playgroud)

  • 那些指的是你想通过 `map` 传递给你的函数的数据。所以,`.x` 是你提供的第一个参数(即 `param_df$x`),而 `.y` 是第二个参数(即 `param_df$y`) (2认同)