【问题标题】:How to pass second parameter to function while using the map function of purrr package in R在R中使用purrr包的map函数时如何将第二个参数传递给函数
【发布时间】:2018-04-09 01:35:10
【问题描述】:

对于可能是一个非常简单的问题表示歉意。

我不熟悉在 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),它的语法是什么?

非常感谢您!

【问题讨论】:

    标签: r purrr


    【解决方案1】:

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

    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】:

    我认为您需要做的就是像这样修改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
    

    【讨论】:

    • 我不明白为什么有必要删除my_functiony 参数的默认值?其余的答案都很好。
    • 你说得对,无论哪种方式都可以。如果 OP 通常将 2 作为默认值(似乎是这种情况),我可能应该这样修改我的答案。我只是想尽量减少功能。
    • Np,很乐意帮助@user1823293
    猜你喜欢
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多