source - funciones en r
Coincidencia parcial de argumento de funciĆ³n (1)
Existe una coincidencia parcial para evitar que escriba nombres de argumento largos. El peligro con esto es que las funciones pueden obtener argumentos adicionales más adelante, los cuales entran en conflicto con su coincidencia parcial. Esto significa que solo es adecuado para el uso interactivo; si está escribiendo un código que se mantendrá durante mucho tiempo (para ir en un paquete, por ejemplo), siempre debe escribir el nombre completo del argumento. El otro problema es que al abreviar el nombre de un argumento, puede hacer que su código sea menos legible.
Dos buenos usos comunes son:
len
lugar delength.out
con la funciónseq
(oseq.int
).all
lugar deall
all.names
con la funciónls
.
Comparar:
seq.int(0, 1, len = 11)
seq.int(0, 1, length.out = 11)
ls(all = TRUE)
ls(all.names = TRUE)
En ambos casos, el código es tan fácil de leer con los nombres abreviados de los argumentos, y las funciones son tan antiguas y lo suficientemente estables que es poco probable que se agregue otro argumento con un nombre conflictivo.
Una mejor solución para ahorrar en la escritura es, en lugar de usar nombres abreviados, para usar la terminación automática de nombres de variables y argumentos. R GUI y RStudio admiten esto utilizando la tecla TAB , y Architect lo admite utilizando CTRL + Espacio .
Sé que para una lista, la coincidencia parcial se realiza al indexar utilizando los operadores básicos $
y [[
. Por ejemplo:
ll <- list(yy=1)
ll$y
[1] 1
Pero todavía soy un novato en R y esto es nuevo para mí, coincidencia parcial de los argumentos de la función:
h <- function(xx=2)xx
h(x=2)
[1] 2
Quiero entender cómo funciona esto. ¿Cuál es el mecanismo detrás de esto? ¿Tiene esto efectos secundarios? Quiero entender cómo alguien puede probar si se dio el argumento xx?
Editar después del comentario de Andrie:
Internamente R usa el algoritmo pmatch
para hacer coincidir el argumento, aquí un ejemplo de cómo funciona esto:
pmatch("me", c("mean", "median", "mode")) # error multiple partial matches
[1] NA
> pmatch("mo", c("mean", "median", "mode")) # mo match mode match here
[1] 3
Pero ¿por qué R tiene esa característica? ¿Cuál es la idea básica detrás de partial unique
coincidencia partial unique
?