El arte de programar en R Un leguaje para la estadística - page 95

CAPÍTULO 5. ESCRITURA DE FUNCIONES
92
## function (formula, data, subset, weights, na.action,
## method = "qr", model = TRUE, x = FALSE, y = FALSE,
## qr = TRUE, singular.ok = TRUE, contrasts = NULL,
## offset, ...)
## NULL
5.1.3. El argumento especial
“...”
En la definición de las funciones existe un argumento especial que se puede
emplear en distintas circunstancias: se trata del argumento especial
“...”
, que
sirve para transferir un número variable de argumentos a otra función. La uti-
lidad de este argumento se da en varios casos que se discuten a continuación.
5.1.3.1. El uso del argumento
“...”
para extender una función
Cuando se quiere extender o modificar el comportamiento de una función
invocándola desde otra función, una manera de pasar varios argumentos, a
los que no se hace referencia en la nueva función, es mediante este argumen-
to, que en este caso podría ser interpretado más o menos como la frase:
“y el
resto de los argumentos”
. Para explicar como se comporta este
argumento
aquí, a
continuación se propone un ejemplo sencillo.
En la sección anterior, 5.1.1 en la página 88, se codificó la función
MiFunc.v3()
.
En la ejecución 3 de esta función, el intérprete se quejó porque, al no existir un
valor por omisión para el argumento
yyy
, su valor quedó indefinido y no se pu-
do ejecutar la función. Supóngase que se quiere hacer una función que modifi-
que el comportamiento de la otra función, simplemente proveyendo un valor
por omisión para dicha función
3
. El código para ese propósito es el siguiente:
NuevaMiFunc
<-
function
(
x
,
yyy
=
-
1
,
...
) {
MiFunc.v3
(x, yyy, ...)
}
NuevaMiFunc
(
1
)
## [1] 5
NuevaMiFunc
(
x
=
1
)
## [1] 5
NuevaMiFunc
(
1
,
z
=
10
)
## [1] 10
3
Desde luego que la opción inmediata sería reprogramar la función. Sin embargo, hay muchas
funciones de cuyo código no se puede disponer o simplemente, la técnica que se ilustra podría
servir para contar con diferentes versiones de la misma función.
1...,85,86,87,88,89,90,91,92,93,94 96,97,98,99,100,101,102,103,104,105,...198
Powered by FlippingBook