La razón última es que si hace tanto programación de propósito general como cálculos numéricos, es útil tener disponible un gran complemento de operadores binarios. Por ejemplo, si almacena números en matrices bidimensionales, es posible que desee multiplicar las matrices por elementos, o puede calcular el producto de matriz de dos matrices. En Matlab estos dos operadores son .*
y *
; en R son *
y %*%
. Python tiene resistedattempts para agregar nuevos operadores, por lo que numpy diferencia entre los dos tipos de producto al tener dos clases: la clase de matriz se multiplica elemento, la clase de matriz se multiplica en el sentido de álgebra lineal.
Otro ejemplo de Python es que para listas, más significa concatenación: [1,2,3]+[4,5] == [1,2,3,4,5]
. Pero para matrices numpy, plus significa adición por elementos: array([1,2]) + array([4,5]) == array([5,7])
. Si su código necesita hacer ambas cosas, debe convertir entre clases o utilizar la notación de funciones, lo que puede generar un código de aspecto engorroso, especialmente en lo que respecta a las matemáticas.
Por lo tanto, a veces sería conveniente tener más operadores disponibles para su uso, y es posible que no sepa de antemano qué tipo de operadores requiere una aplicación en particular. Por lo tanto, los implementadores de R han elegido tratar como operadores cualquier nombre llamado %foo%
, y existen varios ejemplos: %in%
es membresía establecida, %x%
es producto Kronecker, %o%
es producto externo. Para obtener un ejemplo de un lenguaje que ha llevado esto al extremo, consulte Fortress (la sección 16 de la especificación comienza con las reglas para nombres de operador).
En la publicación del blog que mencionas, el autor está utilizando el paquete de gráficos ggplot2, que define %+%
como un tipo de combinación de dos elementos de la gráfica.Realmente parece agregar un método al bare +
(que es una función genérica para que pueda definir lo que significa para los objetos definidos por el usuario), pero también define %+%
para que pueda usar el significado ggplot2 de +
(lo que sea que sea) para otros objetos. Si instala ggplot2, escriba require(ggplot2)
y ?`%+%`
para ver la documentación de ese operador, y methods(`+`)
para ver que se haya agregado una nueva definición a +
.
En el ejemplo del código de su 'EDIT', casi seguramente quiere '+' y no '% +%'. –