Оператор тильды в функции карты - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть вопрос относительно функции карты в R и оператора тильды ´ ~ ´

Почему этот код работает только таким образом:

iris_unique <- map(iris, ~length(unique(.)))

, а не, например, так

iris_unique <- map(iris, length(unique(iris$Sepal.Length)))

Заранее спасибо

1 Ответ

0 голосов
/ 06 декабря 2018

Если вы говорите о map из пакета purrr, эта функция предназначена для отображения функции по вектору.

length(unique(iris$Sepal.Length)) - это конкретное значение (35 для стандартного iris набор данных), поэтому

iris_unique <- map(iris, length(unique(iris$Sepal.Length)))

эквивалентно

iris_unique <- map(iris, 35)

, поскольку 35 не является функцией, это, вероятно, не то, что вы имеете в виду.Однако map() пытается разобраться в этом. В документации говорится, что если для параметра функции вы передадите ему "символьный вектор, числовой вектор или список, он преобразуется в функцию экстрактора", что означает, что 35 преобразуется в функцию function(x){x[35]}, следовательно, конечный результат состоит в извлечении 35-го наблюдения iris.

С другой стороны, документация также описывает, как она переводит формулы в функции.В соответствии с этим формула ~length(unique(.)) переводится в функцию function(x){length(unique(x))}.Поскольку это функция, имеет смысл сопоставить ее со списком или вектором.

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