Каково практическое использование функции тождества в R?

Base R определяет функцию identity, тривиальную функцию идентичности, возвращающую свой аргумент (цитата из ?identity).

Он определяется как:

identity <- function (x){x}

Почему такая тривиальная функция когда-либо была бы полезной? Почему он должен быть включен в базу R?

Ответы

Ответ 1

Не знаю о R, но на функциональном языке часто передаются функции как аргументы другим функциям. В таких случаях постоянная функция (которая возвращает одно и то же значение для любого аргумента) и функция тождества, так сказать, играет аналогичную роль как 0 и 1.

Ответ 2

Я использую его время от времени с применением функции команд.

Например, вы можете написать t() как:

dat <- data.frame(x=runif(10),y=runif(10))
apply(dat,1,identity)

       [,1]      [,2]      [,3]      [,4]      [,5]      [,6]       [,7]
x 0.1048485 0.7213284 0.9033974 0.4699182 0.4416660 0.1052732 0.06000952
y 0.7225307 0.2683224 0.7292261 0.5131646 0.4514837 0.3788556 0.46668331
       [,8]      [,9]      [,10]
x 0.2457748 0.3833299 0.86113771
y 0.9643703 0.3890342 0.01700427

Ответ 3

Одно использование, которое появляется в простом базовом поиске кода, является удобством для наиболее простого типа функции обработки ошибок в tryCatch.

tryCatch(...,error = identity)

который идентичен (ha!) до

tryCatch(...,error = function(e) e)

Итак, этот обработчик поймает сообщение об ошибке, а затем просто вернет его.

Ответ 4

Что бы это ни стоило, он находится в funprog.R (материал функционального программирования) в источнике базового пакета и был добавлен в качестве "удобной функции" в 2008 году: я могу представить (но не могу давайте пример!), что в подходе к функциональному программированию могут быть некоторые контексты (т.е. с использованием Filter, Reduce, Map и т.д.), где было бы удобно иметь функцию тождества...

r45063 | hornik | 2008-04-03 12:40:59 -0400 (Thu, 03 Apr 2008) | 2 lines

Add higher-order functions Find() and Position(), and convenience
function identity().

Ответ 5

Отступая от функционального программирования, identity также используется в другом контексте в R, а именно в статистике. Здесь он используется для обозначения функции в обобщенных линейных моделях. Подробнее об этом см. ?family или ?glm. Вот пример:

> x <- rnorm(100)
> y <- rpois(100, exp(1+x))
> glm(y ~x, family=quasi(link=identity))

Call:  glm(formula = y ~ x, family = quasi(link = identity))

Coefficients:
(Intercept)            x
      4.835        5.842

Degrees of Freedom: 99 Total (i.e. Null);  98 Residual
Null Deviance:      6713
Residual Deviance: 2993         AIC: NA

Однако в этом случае синтаксический анализ его как строки вместо функции приведет к такому же: glm(y ~x, family=quasi(link="identity"))

EDIT. Как отмечено в комментариях ниже, функция base::identity не является тем, что используется конструктором link, и используется только для разбора имени ссылки. (Вместо того, чтобы удалять этот ответ, я оставлю его, чтобы помочь прояснить разницу между ними.)