CAPÍTULO 4. ESTRUCTURAS DE CONTROL Y MANEJO DE DATOS 72
# Primeramente construyamos un vector con elementos numéricos
# arbitrarios, con un generador de números aleatorios
# (distribución uniforme), entre 10.5 y 40.8, generamos 32
# números, así:
nums
<-
runif
(
32
,
10.5
,
40.8
)
suma
<-
0
# Iniciamos la suma como cero
for
(elt
in
nums) {
suma
<-
suma
+
elt
# se agrega cada elemento
}
# Se calcula e imprime el promedio
(promedio
<-
suma
/
length
(nums))
## [1] 28.66
Esta misma operación se puede hacer con la función de agregación
sum()
,
cuyo funcionamiento se explicó anteriormente:
(promedio
<-
sum
(nums)
/
length
(nums))
## [1] 28.66
# Podemos convertir estas operaciones en una función, así:
haz_promedio
<-
function
(
v
) {
sum
(v)
/
length
(v)
}
# o en una sola línea:
haz_promedio
<-
function
(
v
)
sum
(v)
/
length
(v)
# Y llamamos a la función:
haz_promedio
(nums)
## [1] 28.66
Desde luego que un lenguaje como R, cuenta ya con una función que per-
mite hacer este cálculo en un solo
disparo
: la función
mean()
.
mean
(nums)
## [1] 28.66
La función
sum()
es un ejemplo de funciones que toman un objeto estruc-
turado de R y operan sobre los elementos de éste. Otro ejemplo es la función
prod()
, cuya operación es similar a la anterior pero usando la multiplicación
en vez de la suma. La pregunta inmediata que surge aquí es si existe en el
lenguaje alguna función que permita construir funciones de este tipo pero pa-
ra cualquier operador o función, y la respuesta es que sí: la función
Reduce()
tiene precisamente este propósito. En seguida se muestra como se reprograma-