mayor - R: ¿Cómo se llaman los operadores como% en% y cómo puedo aprender sobre ellos?
o en r (4)
El archivo de ayuda, y la entrada general , es de hecho un buen punto de partida ?''%in%''
Por ejemplo, puede ver cómo se define el operador ''%in%''
:
"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0
Incluso puedes crear tus propios operadores:
''%ni%'' <- Negate(''%in%'')
Sé lo básico como ==
y !=
, O incluso la diferencia (vagamente) entre &
y &&
. Pero cosas como %in%
y %%
y algunas cosas usadas en el contexto de sprintf()
, como sprintf("%.2f", x)
cosas sobre las que no tengo idea.
Lo peor de todo es que son difíciles de buscar en Internet porque son caracteres especiales y no sé cómo se llaman ...
Hay varias cosas diferentes que están sucediendo aquí con el símbolo de porcentaje:
Operadores Binarios
Como ya lo han señalado varios, los elementos de la forma %%
, %in%
, %*%
son operadores binarios (módulo, coincidencia y matriz multiplicados respectivamente), como a +
, -
, etc. Son funciones que operan en dos argumentos que R reconoce como especiales debido a su estructura de nombre (comienza y termina con un %
). Esto te permite usarlos en forma:
Argument1 %fun_name% Argument2
En lugar de lo más tradicional:
fun_name(Argument1, Argument2)
Tenga en cuenta que los siguientes son equivalentes:
10 %% 2 == `%%`(10, 2)
"hello" %in% c("hello", "world") == `%in%`("hello", c("hello", "world"))
10 + 2 == `+`(10, 2)
R simplemente reconoce a los operadores estándar así como a los operadores %x%
como especiales y le permite usarlos como operadores binarios tradicionales si no los cita. Si los cita (en los ejemplos anteriores con comillas invertidas), puede usarlos como funciones estándar de dos argumentos.
Operadores binarios personalizados
La gran diferencia entre los operadores binarios estándar y los operadores %x%
es que puede definir operadores binarios personalizados y R los reconocerá como especiales y los tratará como operadores binarios:
`%samp%` <- function(e1, e2) sample(e1, e2)
1:10 %samp% 2
# [1] 1 9
Aquí definimos una versión de operador binario de la función de muestra.
"%" (Porcentaje) como token en función especial
El significado de "%"
en la función como sprintf
o format
es completamente diferente y no tiene nada que ver con los operadores binarios. La clave a tener en cuenta es que, en esas funciones, el carácter %
forma parte de una cadena entrecomillada, y no es un símbolo estándar en la línea de comandos (es decir, "%"
y %
son muy diferentes). En el contexto de sprintf
, dentro de una cadena, "%"
es un carácter especial utilizado para reconocer que los caracteres posteriores tienen un significado especial y no deben interpretarse como texto regular. Por ejemplo, en:
sprintf("I''m a number: %.2f", runif(3))
# [1] "I''m a number: 0.96" "I''m a number: 0.74" "I''m a number: 0.99"
"%.2f"
significa un número de punto flotante ( f
) que se mostrará con dos decimales ( .2
). Observe cómo se interpreta literalmente la pieza "I''m a number: "
. El uso de "%"
permite a los usuarios de sprintf
mezclar texto literal con instrucciones especiales sobre cómo representar los otros argumentos de sprintf
.
La definición del lenguaje R , sección 3.1.4 refiere a ellos como "operadores binarios especiales". Una de las formas en que son especiales es que los usuarios pueden definir nuevos operadores binarios utilizando la sintaxis %x%
(donde x
es cualquier nombre válido).
La sección Escribiendo sus propias funciones de Introducción a R , se refiere a ellos como Operadores Binarios (lo cual es algo confuso porque +
también es un operador binario):
10.2 Definiendo nuevos operadores binarios.
Si le hubiéramos dado a la función
bslash()
un nombre diferente, es decir, una de las formas%cualquier cosa%
podría haber sido utilizado como un operador binario en expresiones en lugar de en forma de función. Supongamos, por ejemplo, que elegimos! Por el carácter interno. La definición de la función comenzaría entonces como
> "%!%" <- función (X, y) {...}
(Tenga en cuenta el uso de comillas). La función podría utilizarse como X%!% Y. (El símbolo de barra invertida en sí no es una opción conveniente ya que presenta problemas especiales en este contexto).
El operador de multiplicación de matrices,% *%, y el operador de matriz de producto externo% o% son otros ejemplos de operadores binarios definidos de esta manera.
No tienen un nombre especial por lo que sé. Se describen en sintaxis y precedencia del operador R.
Los operadores %anything%
son solo funciones normales, que puede definir usted mismo. Sin embargo, debe poner el nombre del operador en comillas invertidas ( `…`
): así es como R trata los nombres especiales.
`%test%` = function (a, b) a * b
2 %test% 4
# 8
Las cadenas de formato sprintf
no tienen ninguna relación, no son operadores en absoluto. En su lugar, son solo las cadenas de formato de estilo C convencionales.