#r #functional-programming #tidyverse #purrr
Вопрос:
Я являюсь пользователем R. Я в основном использую базовые функции apply в R. Однако пакет purrr показался мне интересным, но я не мог различить функции map, lmap и imap. Я был бы признателен, если бы кто-нибудь мог дифференцировать функции с помощью некоторых примеров. Я попробовал ссылку на пакет purrr, но не смог понять реальных различий между ними. Спасибо.
Комментарии:
1. Пожалуйста, исправьте многочисленные ошибки в имени пакета.
2. Спасибо за ваш вклад. Я изменил их.
Ответ №1:
- карта: отображает элементы, работая с каждой функцией.
- imap: как карта, за исключением того, что вы также получаете индекс или имя элемента.
- lmap: сопоставляет элементы, требует, чтобы они были в списке, и выполняет функцию для каждого из них в виде списка из одного элемента
Видеть:
# map:
> foo <- map( c(6:8), ~ print( .x ) )
[1] 6
[1] 7
[1] 8
# imap:
> foo <- imap( c(6:8), ~ print( c(.x,.y) ) )
[1] 6 1
[1] 7 2
[1] 8 3
# lmap:
> foo <- lmap( c(6:8), ~ print( c(.x) ) ) ## ERROR!
> foo <- > foo <- lmap( as.list(6:8), ~ print(.x) )
[[1]]
[1] 6
[[1]]
[1] 7
[[1]]
[1] 8
## imap with names instead:
> foo <- imap( myvector, ~ cat( paste(.x,.y), "n" ) )
6 a
7 b
8 c
Примечание lmap
также работает с данными.фреймами (которые по сути являются списками). Это может быть очень полезно, учтите следующее:
## map:
> foo <- map( head(iris,n=3), print )
[1] 5.1 4.9 4.7
[1] 3.5 3.0 3.2
[1] 1.4 1.4 1.3
[1] 0.2 0.2 0.2
## -> each iteration gets a vector
## and with lmap:
> foo <- lmap( head(iris,n=3), print )
Sepal.Length
1 5.1
2 4.9
3 4.7
Sepal.Width
1 3.5
2 3.0
3 3.2
Petal.Length
1 1.4
2 1.4
3 1.3
Petal.Width
1 0.2
2 0.2
3 0.2
Species
1 setosa
2 setosa
3 setosa
## -> each iteration gets a 1-column data.frame (which is useful when you need that)
Комментарии:
1. Спасибо за ответ. Я действительно ценю это.
2. Я не думаю, что понимаю, почему вы используете lmap. это для того, чтобы убедиться , что входные данные представляют собой список, точно так же, как map_chr (), убедитесь, что выходные данные, например, вектор символов?
3. нет, это должно иметь индекс каждого элемента, а также фактического элемента. иногда вам нужно знать, какой номер товара вы обрабатываете, а также сам товар