【问题标题】:Understanding purr map output了解 purr 地图输出
【发布时间】:2018-10-16 10:24:42
【问题描述】:

在理解 map 返回的内容时遇到了一些麻烦

map(1:3, print)
[1] 1
[1] 2
[1] 3
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

前三个输出是有意义的,因为它们与手动输入返回的内容相匹配

print(1)
print(2)
print(3)

在这之后,它似乎是某种嵌套列表。有什么方法可以只取其中一个吗?

任何帮助将不胜感激!

【问题讨论】:

    标签: r purrr


    【解决方案1】:

    所以我认为发生了什么是map 返回一个列表,print 返回到控制台。所以你看到的是printmap 的回归。当您将其分配给变量时,它变得非常明显。

    library(purrr)
    
    #no assignment, both returns
    map(1:3, ~print(.x))
    #> [1] 1
    #> [1] 2
    #> [1] 3
    #> [[1]]
    #> [1] 1
    #> 
    #> [[2]]
    #> [1] 2
    #> 
    #> [[3]]
    #> [1] 3
    
    x <- map(1:3, ~print(.x))
    #> [1] 1
    #> [1] 2
    #> [1] 3
    
    
    x
    #> [[1]]
    #> [1] 1
    #> 
    #> [[2]]
    #> [1] 2
    #> 
    #> [[3]]
    #> [1] 3
    

    您可以在此处看到,即使您将 map(1:3, ~print(.x)) 分配给变量,print 仍将 1:3 返回到控制台,并且变量 x 将 1:3 的值保存在列表中。

    【讨论】:

      【解决方案2】:

      使用purrr,您可以指定要获得的输出,如下所示:

      map_int(1:3, print)
      
      #[1] 1
      #[1] 2
      #[1] 3
      #[1] 1 2 3
      

      请参阅?map 以获取所有可能的结果。当然,如果你想要的结果没有意义,它会抛出一个错误,例如map_lgl(1:3, print)

      当您在自定义函数中使用map 时,这非常有用,因为您可以控制输出,并在出现问题时捕获错误。

      当然你可以单独使用map,但就像在你的例子中,最好使用更精确的东西(map_intmap_dfmap_char,ecc。)。

      【讨论】:

        猜你喜欢
        • 2021-11-10
        • 1970-01-01
        • 2012-07-25
        • 2021-05-26
        • 2017-04-18
        • 2016-12-24
        • 2017-03-09
        • 2011-10-20
        • 2014-01-27
        相关资源
        最近更新 更多