代码之家  ›  专栏  ›  技术社区  ›  Guilherme

R函数使用。和~

  •  2
  • Guilherme  · 技术社区  · 7 年前

    我在努力学习使用 ~ . 在R.

    在下面的代码中,使用和不使用 ~ . 。我不明白第一个函数出现错误时发生了什么。

    #FIRST FUNCTION
    col_summary2 <- function(.x, .f, ...){
      .x <- purrr::keep(.x, is.numeric)
      purrr::map_dbl(.x, ~.f(., ...))
    }
    
    col_summary2(mtcars,mean) #Error in mean.default(., ...) : 'trim' must be numeric of length one
    
    #SECOND FUNCTION
    col_summary2 <- function(.x, .f, ...){
      .x <- purrr::keep(.x, is.numeric)
      purrr::map_dbl(.x, function(x) .f(x, ...))
    }
    
    col_summary2(mtcars,mean) #mpg        cyl       disp         hp       drat         wt       qsec         vs      am       gear       carb
                              #20.090625   6.187500 230.721875 146.687500   3.596563   3.217250  17.848750   0.437500 0.406250   3.687500   2.812500 
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   moodymudskipper    7 年前

    purrr::as_mapper

    as_mapper(~f(., ...))
    # function (..., .x = ..1, .y = ..2, . = ..1) 
    #   f(., ...)
    

    purrr::map_dbl(.x, function(..., .x = ..1, .y = ..2, . = ..1) f(., ...))
    

    ... .f

    .x .y . ..1 ..2

    col_summary3 <- function(.x, .f, ...){
      .x <- purrr::keep(.x, is.numeric)
      purrr::map_dbl(.x, ~{print(list(...));.f(., ...)})
    }
    col_summary3(mtcars,mean) 
    # [[1]]
    # [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4
    # [17] 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
    #  Error in mean.default(., ...) : 'trim' must be numeric of length one 
    

    .f(.,...) mean.default trim

    purr::invoke

    col_summary4 <- function(.x, .f, ...){
      .x <- purrr::keep(.x, is.numeric)
      purrr::map_dbl(.x, ~ invoke(.f, .y, .), .y=list(...))
    }
    
    col_summary4(mtcars,mean) 
    # mpg        cyl       disp         hp       drat         wt       qsec         vs         am       gear       carb 
    # 20.090625   6.187500 230.721875 146.687500   3.596563   3.217250  17.848750   0.437500   0.406250   3.687500   2.812500 
    
    col_summary4(mtcars,mean, trim = 0.3)
    # mpg         cyl        disp          hp        drat          wt        qsec          vs          am        gear        carb 
    # 19.1785714   6.4285714 214.5071429 136.2857143   3.5971429   3.2467857  17.7600000   0.3571429   0.2857143   3.5714286   2.6428571