Понимание мурлыканья карты - PullRequest
0 голосов
/ 16 октября 2018

Имея небольшую проблему, оборачиваясь вокруг того, что возвращается картой

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)
* 1006.* После этого, похоже, какой-то вложенный список.Есть ли способ получить только один или другой?

Любая помощь будет признательна!

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Итак, я думаю, что 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 в списке.

0 голосов
/ 16 октября 2018

С помощью 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.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...