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

避免在purr map调用中返回匿名函数中最后计算的表达式

  •  0
  • JasonAizkalns  · 技术社区  · 7 年前

    考虑一下:

    library(tidyverse)
    
    mtcars %>%
      select(mpg, cyl) %>%
      map(
        function(x) {
          cat("*****HEAD******\n")
          print(head(x))
          cat("*****TAIL******\n")
          print(tail(x))
        }
      )
    

    返回:

    *****HEAD******
    [1] 21.0 21.0 22.8 21.4 18.7 18.1
    *****TAIL******
    [1] 26.0 30.4 15.8 19.7 15.0 21.4
    *****HEAD******
    [1] 6 6 4 6 8 6
    *****TAIL******
    [1] 4 4 8 6 8 4
    $`mpg`
    [1] 26.0 30.4 15.8 19.7 15.0 21.4
    
    $cyl
    [1] 4 4 8 6 8 4
    

    如何避免返回上次计算的表达式(即, tail(x) )?我期望的输出是:

    *****HEAD******
    [1] 21.0 21.0 22.8 21.4 18.7 18.1
    *****TAIL******
    [1] 26.0 30.4 15.8 19.7 15.0 21.4
    *****HEAD******
    [1] 6 6 4 6 8 6
    *****TAIL******
    [1] 4 4 8 6 8 4
    

    我试验过 return(NULL) , return(NA) return(invisible(x)) 但没有成功。

    2 回复  |  直到 7 年前
        1
  •  2
  •   MHammer    7 年前

    walk() map()

    capture <- mtcars %>%
      select(mpg, cyl) %>%
      walk(
        function(x) {
          cat("*****HEAD******\n")
          print(head(x))
          cat("*****TAIL******\n")
          print(tail(x))
        }
      )
    # *****HEAD******
    #   [1] 21.0 21.0 22.8 21.4 18.7 18.1
    # *****TAIL******
    #   [1] 26.0 30.4 15.8 19.7 15.0 21.4
    # *****HEAD******
    #   [1] 6 6 4 6 8 6
    # *****TAIL******
    #   [1] 4 4 8 6 8 4
    
        2
  •  1
  •   G. Grothendieck    7 年前

    %>% invisible

    mtcars %>%
      select(mpg, cyl) %>%
      map(
        function(x) {
          cat("*****HEAD******\n")
          print(head(x))
          cat("*****TAIL******\n")
          print(tail(x))
        }
      ) %>% 
      invisible
    

    *****HEAD******
    [1] 21.0 21.0 22.8 21.4 18.7 18.1
    *****TAIL******
    [1] 26.0 30.4 15.8 19.7 15.0 21.4
    *****HEAD******
    [1] 6 6 4 6 8 6
    *****TAIL******
    [1] 4 4 8 6 8 4