¿Qué significan los operadores% op% en R? por ejemplo, “% en%”

Traté de hacer esta búsqueda simple pero no pude encontrar nada en el símbolo de porcentaje ( % ) en R.

¿Qué significa %in% en el siguiente código?

time(x) %in% time(y) donde y son matrices.

¿Cómo busco ayuda en %in% y funciones similares que siguen el patrón %stuff% , ya que no puedo encontrar el archivo de ayuda?

Preguntas relacionadas:

  • ¿Qué hace, por ejemplo,% +%? en R
  • El operador R% *%
  • Qué significa% *% en R
  • https://stackoverflow.com/questions/23091654/what-does-it-mean-when-something-is-between-two-percent-signs-in-r
  • ¿Qué hace% ||% en R?
  • ¿Qué significa%>% en R?

Ponga comillas alrededor para encontrar la página de ayuda. Cualquiera de estos trabajos

 > help("%in%") > ?"%in%" 

Una vez que llegue a la página de ayuda, verá que

‘% en%’ se define actualmente como

‘”% en%” <- función (x, tabla) coincidencia (x, tabla, nomatch = 0)> 0′


Como el time es genérico, no sé a qué time(X2) regresa sin saber qué es X2 . Pero, %in% te dice qué elementos del lado izquierdo también están en el lado derecho.

 > c(1:5) %in% c(3:8) [1] FALSE FALSE TRUE TRUE TRUE 

Ver también, intersect

 > intersect(c(1:5), c(3:8)) [1] 3 4 5 

No creía que las respuestas de GSee o Sathish fueran lo suficientemente extensas porque “%” tiene significado por sí solo y no solo en el contexto del operador %in% . Es el mecanismo para definir nuevos operadores de infijo por parte de los usuarios. Es un problema mucho más general que las virtudes del operador %in% infijo o su match ancestral de prefijo más general. Podría ser tan simple como hacer que un (a) operador um

  `%s%` <- function(x,y) x + y 

O podría ser más interesante, por ejemplo, crear un segundo operador derivado:

  `%DD%` <- function(expr, nam="x") { D(D( bquote(.(expr)), nam), nam) } expression(x^4) %DD% "x" # 4 * (3 * x^2) 

El % -character también tiene importancia en el análisis de las funciones de formato de fecha, hora y tipo C, como strptime , formatC y sprintf .

Desde que se escribió originalmente, hemos visto la aparición del paquete magrittr con la elaboración dplyr que demuestra un uso más para los operadores con % flanqueo.

Entonces, la respuesta más general es que los símbolos % son manejados especialmente por el analizador R. Como el analizador se usa para procesar expresiones de plotmath, también verá amplias opciones para anotaciones de gráficos en la página de ayuda de " ?plotmath .

De manera más general, %foo% es la syntax de un operador binario. Los operadores binarios en R son en realidad funciones simplemente disfrazadas, y toman dos argumentos (el anterior y el posterior al operador se convierten en los primeros dos argumentos de la función).

Por ejemplo:

 > `%in%`(1:5,4:6) [1] FALSE FALSE FALSE TRUE TRUE 

Mientras que %in% se define en la base R, también puede definir su propia función binaria:

 `%hi%` <- function(x,y) cat(x,y,"\n") > "oh" %hi% "my" oh my 

%op% denota un operador binario infijo . Hay varios operadores incorporados que usan % y también puede crear los suyos propios.

(Un solo signo % no es una palabra clave en R. Puede ver una lista de palabras clave en la página de ayuda ?Reserved ).


¿Cómo obtengo ayuda con 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: la respuesta de GSee .


¿Qué hace %in% ?

Como se describe en la página de ayuda ?`%in%` (que en realidad es la página de ayuda de ?match ya que %in% es realmente solo una versión infija de la match ),

[ %in% ] devuelve un vector lógico que indica si hay una coincidencia o no para su operando izquierdo

Se usa más comúnmente 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: la respuesta de GSee, la respuesta de Ari , la respuesta de Sathish .


¿Cómo creo mis propios operadores binarios de infijo?

Estas son funciones, y se pueden definir de la misma manera que cualquier otra función, con un par de restricciones.

  1. Es un opertor binario , por lo que la función debe tomar exactamente dos argumentos.
  2. Como el nombre no es estándar, debe escribirse con comillas o comillas inversas.

Por ejemplo, esto define un operador de potencia matricial.

 `%^%` <- function(x, y) matrixcalc::matrix.power(x, y) matrix(1:4, 2) %^% 3 

Crédito: la respuesta de BondedDust, la respuesta de Ari .


¿Qué otros % operadores hay?

En la base R:

%/% y %% realizan divisiones enteras y divisiones modulares , respectivamente, y se describen en la página de ayuda de " ?Arithmetic .

%o% da el producto externo de las matrices.

%*% realiza la multiplicación de la matriz .

%x% realiza el producto Kronecker de matrices.

En ggplot2 :

%+% reemplaza el dataframe en un ggplot.

%+replace% modifica los elementos del tema en un ggplot.

%inside% (interno) comprueba los valores en un rango.

%||% (interno) proporciona un valor predeterminado en caso de valores NULL . Esta función también aparece internamente en devtools, reshape2, roxygen2 y knitr. (En knitr se llama %n% )

En magrittr :

%>% coloca el lado izquierdo en una expresión en el lado derecho.

%<>% canaliza el lado izquierdo hacia una expresión en el lado derecho y luego asigna el resultado al objeto del lado izquierdo.

%T>% canaliza el lado izquierdo hacia una expresión en el lado derecho, que utiliza solo para sus efectos secundarios, y regresa al lado izquierdo.

%,% construye una secuencia funcional.

%$% expone columnas de un data.frame o miembros de una lista.

En data.table:

%between% comprueba los valores en un rango.

%chin% es como %in% , optimizado para vectores de caracteres.

%like% comprueba si hay coincidencias de expresiones regulares.

En Hmisc:

%nin% devuelve el opuesto de %in% .

En devtools :

%:::% (interno) obtiene una variable de un espacio de nombres pasado como una cadena.

En sp :

%over% realiza una unión espacial (por ejemplo, ¿qué polígono corresponde a algunos puntos?)

En rebus :

%R% concatena elementos de un objeto regex .


De manera más general, puede 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 ) 

%in% es un operador que se usa para buscar y subconjuntos múltiples ocurrencias del mismo nombre o valor en una matriz o dataframe.

Por ejemplo 1: subconjunto con el mismo nombre

 set.seed(133) x <- runif(5) names(x) <- letters[1:5] x[c("a", "d")] # ad # 0.5360112 0.4231022 

Ahora cambia el nombre de "d" por "a"

  names(x)[4] <- "a" 

Si intenta extraer los nombres similares y sus valores utilizando el subíndice anterior, no funcionará. Observe el resultado, no tiene los elementos de [1] y [4].

 x[c("a", "a")] # aa # 0.5360112 0.5360112 

Por lo tanto, puede extraer las dos "a" s de posición diferente en una variable usando %in% operador binario.

 names(x) %in% "a" # [1] TRUE FALSE FALSE TRUE FALSE #assign it to a variable called "vec" vec <- names(x) %in% "a" #extract the values of two "a"s x[vec] # aa # 0.5360112 0.4231022 

Ejemplo 2: subconjunto de varios valores de una columna Consulte este sitio para ver un ejemplo