superponer - ¿Qué hace, por ejemplo,%+%? en R
superponer graficas en r (3)
Esta es una pregunta muy básica, pero aparentemente Google no es muy bueno en la búsqueda de cadenas como "% +%". Así que mi pregunta es: qué y cuándo se usa "% +%" y similar. Supongo que es una especie de fusión.
EDIT: Ok - Creo que mi pregunta es respondida. % X% es un operador binario de algún tipo. Así que ahora creo que buscaré información sobre cómo y cuándo usarlos. Mi pregunta se inspiró en parte en la pregunta de ayer, pero solo después de haber visto esta post en el blog "learning R". El pasaje que dio lugar a mi pregunta fue este:
Para hacer esto, se creará un nuevo marco de datos con los totales anuales y luego se fusionará con el conjunto de datos existente (los nombres de variables en ambos marcos de datos deben ser idénticos para que esto funcione). Luego simplemente cambiamos el marco de datos en el que se basa la trama.
## add total immigration figures to the plot
total <- cast(df.m, Period ~ ., sum)
total <- rename(total, c("(all)" = "value"))
total$Region <- "Total"
df.m.t <- rbind(total, df.m)
c1 <- c %+% df.m.t
Basado en mi vistazo rápido al manual , puede ser un operador de infijo definido por el usuario, por lo que es difícil decir cuál sería el significado real ...
Pensaría en la adición binaria.
La razón principal es que si realiza tanto la programación de propósito general como los cálculos numéricos, es útil tener un gran complemento de operadores binarios disponibles. Por ejemplo, si almacena números en matrices bidimensionales, es posible que desee multiplicar las matrices de forma elemental, o puede que desee calcular el producto matricial de dos matrices. En Matlab estos dos operadores son .*
Y *
; en R son *
y %*%
. Python se ha resisted attempts de agregar nuevos operadores, y por numpy tanto, numpy diferencia entre los dos tipos de productos al tener dos clases: la clase de matriz se multiplica de forma elemental, 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 las matrices numpy, más significa adición de elementos: array([1,2]) + array([4,5]) == array([5,7])
. Si su código necesita hacer ambas cosas, tiene que convertir entre clases o usar la notación de función, lo que puede llevar a un código de aspecto engorroso, especialmente cuando se trata de 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 optado por tratar como operadores a cualquier cosa llamada %foo%
, y existen varios ejemplos: %in%
se establece como miembro, %x%
es producto de Kronecker, %o%
es producto externo. Para ver un ejemplo de un lenguaje que ha llevado esto al extremo, vea Fortress (la sección 16 de la especificación comienza con las reglas para los nombres de los operadores).
En la publicación del blog que mencionaste, el autor está utilizando el paquete de gráficos ggplot2 , que define %+%
para significar algún tipo de combinación de dos elementos de la trama. Realmente parece agregar un método a la simple +
(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 de ggplot2 de +
es) para otros objetos. Si instala ggplot2, escriba require(ggplot2)
y ?`%+%`
Para ver la documentación de ese operador, y los methods(`+`)
para ver que se ha agregado una nueva definición a +
.
No hay un %+%
generalmente definido. Tal vez miraste esta pregunta de ayer donde
R> ''%+%'' <- paste
R> "foo" %+% "bar"
[1] "foo bar"
R>
y se definió la función de concatenación de cadenas ad-hoc. En general, la sintaxis ''porcentaje-operador-porcentaje'' está abierta para las funciones definidas por el usuario de dos argumentos, pero no hay una versión generalmente aceptada (AFAIK) para %+%
que puede esperar estar presente en todas partes.