在R中使用purrr包的map函数时如何传递第二个参数来函数

elv*_*ngo 4 r purrr

抱歉,这可能是一个非常简单的问题。

我是R语言中使用purrr包的新手,我正努力尝试将第二个参数传递给函数。

library(dplyr)
library(purrr)

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

my_df_2 <- my_df %>%
  mutate(new_col = map_dbl(.x = old_col, .f = my_function))
Run Code Online (Sandbox Code Playgroud)

这行得通,通常我不需要更改y的值,但是如果我必须通过mutate&map组合传递y的其他值(例如y = 3),它的语法是什么?

提前非常感谢您!

tyl*_*uRp 5

我认为您需要做的就是map_dbl像这样修改:

library(dplyr)
library(purrr)

df <- data.frame(a = c(2, 3, 4, 5.5))

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

df %>%
  mutate(new_col = map_dbl(.x = a, y = 3, .f = my_function))
Run Code Online (Sandbox Code Playgroud)
    a new_col
1 2.0     5.0
2 3.0     6.0
3 4.0     7.0
4 5.5     8.5
Run Code Online (Sandbox Code Playgroud)


www*_*www 5

另一个想法是使用以下语法。

library(dplyr)
library(purrr)

# The function
my_function <- function(x, y = 2) {
  z = x + y
  return(z)
}

# Example data frame
my_df <- data_frame(old_col = 1:5)

# Apply the function   
my_df_2 <- my_df %>%
  mutate(new_col = map_dbl(old_col, ~my_function(.x, y = 3)))

my_df_2
# # A tibble: 5 x 2
# old_col new_col
#     <int>   <dbl>
# 1       1      4.
# 2       2      5.
# 3       3      6.
# 4       4      7.
# 5       5      8.
Run Code Online (Sandbox Code Playgroud)

  • ~这里的目的是什么? (2认同)