Вызывающая функция dplyr :: mutate_all с пустыми скобками - PullRequest
0 голосов
/ 27 февраля 2019

Это может быть известным поведением, но я нахожу это странным - есть ли причина, по которой вызов функции в mutate_all с пустыми скобками просто не дает результата (без мутации), без ошибки или предупреждения?

library(tidyverse)
sample_df <- data_frame(id = 1:3, name = letters[1:3])

# with parenthesis
sample_df %>% mutate_all(as.character()) %>% str

#> Classes 'tbl_df', 'tbl' and 'data.frame':    3 obs. of  2 variables:
#>  $ id  : int  1 2 3
#>  $ name: chr  "a" "b" "c"

# without parenthesis
sample_df %>% mutate_all(as.character) %>% str

#> Classes 'tbl_df', 'tbl' and 'data.frame':    3 obs. of  2 variables:
#>  $ id  : chr  "1" "2" "3"
#>  $ name: chr  "a" "b" "c"

Создано в 2019-02-27 пакетом представ (v0.2.1)

1 Ответ

0 голосов
/ 27 февраля 2019

Из того, что я понял, это связано с нестандартной оценкой dplyr (NSE).Из документации ?mutate_all (выделено жирным шрифтом)

.funs: список вызовов функций, сгенерированных функциями 'funs ()', или вектором символов имен функций ,или просто функция.

Таким образом, dplyr s NSE означает, что мы можем написать

sample_df %>% mutate_all("as.character")

или

sample_df %>% mutate_all(as.character)

Другими словами, мыможет предоставлять имя функции в виде символа или символьного вектора.


С другой стороны, обратите внимание, как as.character() возвращает

character(0)

, поэтому

sample_df %>% mutate_all(as.character())

будет соответствовать передаче пустого имени функции.

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