Нужно ли использовать «.»символ в функции purr map () - PullRequest
0 голосов
/ 30 ноября 2018

При попытке прочитать твиты из текстового файла, который использует «|»в качестве разделителя следующие два фрагмента кода дают, по-видимому, похожие результаты:

bbc <- stringi::stri_read_lines(".../bbchealth.txt", 
                                     encoding = "auto") %>%
  map(str_split_fixed, "\\|", 3) %>%
  map_df(as_tibble)

и

bbc <- stringi::stri_read_lines(".../bbchealth.txt", 
                                     encoding = "auto") %>%
  map(., str_split_fixed, "\\|", 3) %>%
  map_df(., as_tibble)

Мой вопрос заключается в том, является ли "."Символ в двух функциях отображения в последнем случае, который предположительно передает список или вектор, вообще нужен?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Как упоминалось в OP, два набора кодовых блоков дают одинаковый результат, поскольку он знает, что входные данные передаются из lhs %>%.Однако существуют ситуации, когда нам может понадобиться точное указание ..Предположим, у нас есть оператор print в одной из цепочек, тогда без указания . могут возникнуть проблемы

bbc <- stringi::stri_read_lines(".../bbchealth.txt", 
                                 encoding = "auto") %>%
 {print("hello")
  map(., str_split_fixed, "\\|", 3)} %>%
  map_df(as_tibble)
0 голосов
/ 30 ноября 2018

При использовании канала %>% первый аргумент выражения с правой стороны является результатом левого выражения.Это можно обойти, используя ., чтобы указать, куда вместо этого должно идти выражение LHS, если оно не должно быть первым выражением.Например:

a<-1
a %>% paste("3")
[1] "1 3"
a %>% paste("3",.)
[1] "3 1"

Это относится к некоторым функциям, где первый аргумент не является данными (например, base :: Reduce), или если вы хотите использовать результат LHS где-то еще ввыражение, как в примере выше.

Так что, если LHS должен быть первым аргументом в выражении RHS, нет необходимости в ..

BTW - . также можетбудет использоваться, если по какой-то причине вы хотите использовать LHS более одного раза в выражении RHS:

a %>% paste(.,"3",.)
[1] "1 3 1"

или чуть более реалистичный пример:

a %>% ifelse(.==1,3,.)
[1] 3
a %>% ifelse(.!=1,3,.)
[1] 1

(и, каквы можете видеть, вы также можете использовать . для создания логических условий).

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