Una sola %
signo no es una palabra clave en R. (Se puede ver una lista de los de la página ?Reserved
ayuda.) En cambio, %
denota un infixbinary operator. Hay varios operadores incorporados que usan %
, y también puede crear los suyos propios.
¿Cómo consigo ayuda a los operadores binarios?
Al igual que con cualquier cosa que no sea un nombre de variable estándar, debe encerrar el término entre comillas o comillas inversas.
?"%in%"
?`%in%`
Crédito: GSee's answer.
¿Qué %in%
hacer?
Como se describe en la página ?`%in%`
ayuda (que en realidad es la página ?match
ayuda ya %in%
es en realidad sólo una versión infija de match
.),
[%in%
] devuelve un vector lógico que indica si hay una coincidencia o no para su operando izquierdo
Es el más comúnmente utilizado con variables categóricas, aunque también se puede usar con números.
c("a", "A") %in% letters
## [1] TRUE FALSE
1:4 %in% c(2, 3, 5, 7, 11)
## [1] FALSE TRUE TRUE FALSE
Crédito: GSee's answer, Ari's answer, Sathish's answer.
¿Cómo puedo crear mis propios operadores infijos binarias?
Estas son funciones, y se pueden definir de la misma manera que cualquier otra función, con un par de restricciones.
- Es un binario Opertor, por lo que la función debe tener exactamente dos argumentos.
- Como el nombre no es estándar, debe escribirse con comillas o comillas inversas.
Por ejemplo, esto define un operador de potencia de matriz.
`%^%` <- function(x, y)
{
matrixcalc::matrix.power(x, y)
}
matrix(1:4, 2) %^% 3
Crédito: BondedDust's answer, Ari's answer.
¿Qué otros operadores %
hay?
En base de R:
%/%
y %%
realizar integer division y modular division respectivamente, y se describen en la página ?Arithmetic
ayuda.
%o%
da el outer product de matrices.
%*%
realiza matrix multiplication.
%x%
realiza el Kronecker product de matrices.
En ggplot2:
%+%
sustituye a la trama de datos en un ggplot.
%+replace%
modifica los elementos del tema en un ggplot.
%inside%
(interno) comprueba los valores en un rango.
%||%
(interna) proporciona un valor predeterminado en el caso de NULL
valores. Esta función también aparece internamente en devtools, reshape2, roxygen2 y knitr. (En knitr se llama %n%
.)
En magrittr:
%>%
tuberías el lado izquierdo en una expresión en el lado derecho.
%<>%
canaliza el lado izquierdo en una expresión en el lado derecho, y luego asigna el resultado al objeto del lado izquierdo.
%T>%
canaliza el lado izquierdo en una expresión en el lado derecho, que utiliza solo por sus efectos secundarios, devolviendo el lado izquierdo.
%,%
crea una secuencia funcional.
%$%
expone expone columnas de un data.frame o miembros de una lista.
En data.table:
%between%
cheques para valores en un rango.
%chin%
es como %in%
, optimizado para vectores de caracteres.
%like%
busca coincidencias de expresiones regulares.
En Hmisc:
%nin%
devuelve el opuesto de %in%
.
En devtools:
%:::%
(internos) para crear una variable de un espacio de nombres pasado como una cadena.
En sp:
%over%
realiza una unión espacial
En rebus (por ejemplo, que polígono corresponde a algunos puntos?):
%R%
concatena elementos de un objeto regex
.
De manera más general, se pueden encontrar todos los operadores en todos los paquetes instalados en su máquina usando:
library(magrittr)
ip <- installed.packages() %>% rownames
(ops <- setNames(ip, ip) %>%
lapply(
function(pkg)
{
rdx_file <- system.file("R", paste0(pkg, ".rdx"), package = pkg)
if(file.exists(rdx_file))
{
rdx <- readRDS(rdx_file)
fn_names <- names(rdx$variables)
fn_names[grepl("^%", fn_names)]
}
}
) %>%
unlist
)
Véase también http://stackoverflow.com/questions/1328903/what-does- eg-do-in-r?rq = 1 –