【发布时间】: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)
在这之后,它似乎是某种嵌套列表。有什么方法可以只取其中一个吗?
任何帮助将不胜感激!
【问题讨论】:
在理解 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)
在这之后,它似乎是某种嵌套列表。有什么方法可以只取其中一个吗?
任何帮助将不胜感激!
【问题讨论】:
所以我认为发生了什么是map 返回一个列表,print 返回到控制台。所以你看到的是print 和map 的回归。当您将其分配给变量时,它变得非常明显。
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 的值保存在列表中。
【讨论】:
使用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_int,map_df,map_char,ecc。)。
【讨论】: