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

11

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

我是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))

这段代码可以正常运行,大多数情况下我不需要更改y的值,但如果我需要通过mutate和map组合传递不同的y值(比如y=3),应该怎么写语法?

非常感谢您的帮助!

2个回答

14

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

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.

2
这里的~有什么作用? - ktyagi
1
晚回答了,但如果有其他人想知道的话 - 在purrr函数的上下文中,~是创建内联匿名函数的速记符号。有关更多信息,请参见Advanced R中的此解释 - Chris Greening

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))
    a new_col
1 2.0     5.0
2 3.0     6.0
3 4.0     7.0
4 5.5     8.5

1
我不明白为什么需要在my_function中删除y参数的默认值?答案的其余部分是好的。 - Marius
没错,两种方法都能行。如果 OP 通常将 2 作为默认值(似乎是这种情况),那么我应该相应地修改我的答案。我只是想尽可能地让函数保持简洁。 - tyluRp
没问题,很高兴能帮助 @user1823293 - tyluRp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接