CAPÍTULO 4. ESTRUCTURAS DE CONTROL Y MANEJO DE DATOS 71
raíz cuadrada, la tentación inmediata es resolver esta operación como se hace
en la mayoría de los lenguajes
procedurales
:
# Sea el vector:
vv
<-
c
(
-
2
,
3
,
4
)
# Se creará una función que haga el trabajo
modulo
<-
function
(
v
) {
s
<-
0
# Contendrá la suma de cuadrados
for
(elt_v
in
v) {
s
<-
s
+
elt_v
^
2
# Incrementamos la suma
}
# El resultado es la raíz de la suma:
sqrt
(s)
}
# y el módulo que queremos es:
modulo
(vv)
## [1] 5.385
En la sección 2.2.5, sin embargo, se aprendió que las operaciones aritméticas
se pueden distribuir a lo largo de los elementos de un vector, y esta es una
característica del lenguaje de la que se puede sacar provecho en este momento;
recurriendo adicionalmente a la función de agregación
sum()
, que toma como
argumento un vector y suma uno a uno sus elementos y entrega esa suma como
resultado. Entonces en R, la función
modulo()
, se puede programar así:
modulo0
<-
function
(
v
) {
sqrt
(
sum
(v
^
2
))
}
# Puede quedar en una línea, así:
modulo0
<-
function
(
v
)
sqrt
(
sum
(v
^
2
))
# y la utilizamos igual:
modulo0
(vv)
## [1] 5.385
Nótese cómo, de manera admirable, esta forma de programación se apega
mucho más a la fórmula matemática mostrada previamente.
El problema de la media de los valores en un vector numérico es incluso
más sencillo. Para el mismo vector,
v
, definido con anterioridad, la siguiente
fórmula sirve para obtener la media:
¯
v
=
1
n
n
∑
i
=
1
v
i
En un lenguaje de programación usual, esto se haría más o menos así: