将头缠绕在地图返回的内容上会遇到一些麻烦
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)
在此之后,这似乎是某种嵌套列表。有什么办法只能得到其中一个?
任何帮助将不胜感激!
答案 0 :(得分: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的值。 / p>
答案 1 :(得分: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_int
,map_df
,map_char
等)