Beruflich Dokumente
Kultur Dokumente
y = colores ( genero )
Salida Nombre Entrada
Funciones
Las funciones son muy útiles para efectuar tareas repetitivas que dependen
de algunas pocas variables, por ejemplo:
1 Dado un vector de datos, reportar la media y desviación estándar en
col = colores(género)
Funciones
Las funciones son muy útiles para efectuar tareas repetitivas que dependen
de algunas pocas variables, por ejemplo:
1 Dado un vector de datos, reportar la media y desviación estándar en
col = colores(género)
de caracteres 'red'
Funciones
Las funciones son muy útiles para efectuar tareas repetitivas que dependen
de algunas pocas variables, por ejemplo:
1 Dado un vector de datos, reportar la media y desviación estándar en
col = colores(género)
de caracteres 'red'
col = colores(género)
de caracteres 'red'
7 > potencia ()
8 Error in potencia () : argument " x " is missing , with no
default
2 Modique la función tal que el parámetro de entrada x2 sea opcional, con valor
por defecto de cero
3 Modique la función del apartado anterior para que el argumento opcional x2 sea
por defecto 2 veces el parámetro x1
P
1
Práctica de funciones
Construir una función que dados dos parámetros x1 y x2 , calcule x1 − x2
diferencia <- function(x1, x2) { return(x1 - x2) }
1 > diferencia (4 , 1)
2 [1] 3
3 > diferencia (4)
4 Error diferencia (4) : arg " x2 " missing , no default
2 Modique la función tal que el parámetro de entrada x2 sea opcional, con valor
por defecto de cero
3 Modique la función del apartado anterior para que el argumento opcional x2 sea
por defecto 2 veces el parámetro x1
P
1
Práctica de funciones
Construir una función que dados dos parámetros x1 y x2 , calcule x1 − x2
diferencia <- function(x1, x2) { return(x1 - x2) }
1 > diferencia (4 , 1)
2 [1] 3
3 > diferencia (4)
4 Error diferencia (4) : arg " x2 " missing , no default
2 Modique la función tal que el parámetro de entrada x2 sea opcional, con valor
por defecto de cero
diferencia <- function(x1, x2 = 0) { return(x1 - x2) }
1 > diferencia (4) # x2 = 0
2 [1] 4
3 Modique la función del apartado anterior para que el argumento opcional x2 sea
por defecto 2 veces el parámetro x1
P
1
Práctica de funciones
Construir una función que dados dos parámetros x1 y x2 , calcule x1 − x2
diferencia <- function(x1, x2) { return(x1 - x2) }
1 > diferencia (4 , 1)
2 [1] 3
3 > diferencia (4)
4 Error diferencia (4) : arg " x2 " missing , no default
2 Modique la función tal que el parámetro de entrada x2 sea opcional, con valor
por defecto de cero
diferencia <- function(x1, x2 = 0) { return(x1 - x2) }
1 > diferencia (4) # x2 = 0
2 [1] 4
3 Modique la función del apartado anterior para que el argumento opcional x2 sea
por defecto 2 veces el parámetro x1
diferencia <- function(x1, x2 = 2 * x1) { return(x1 - x2) }
1 > diferencia (4 , 1) # x1 = 4 y x2 = 1
2 [1] 3
3 > diferencia (2) # x2 = 4
4 [1] -2
Programación estructurada
Mientras
¾a = b?
si a > 0
no Comandos a ≤0
a >0
Sigue
Sigue
Forma completa
Forma simple si
1 if ( condicion1 ) {
1 if ( condici ó n ) { 2 comando1
2 comando1 3 ...
3 ... 4 } else if
4 } ( condicion2 ) {
5 comando2
Forma si. . . de otro modo
6 ...
1 if ( condicion1 ) { 7 } else if
2 comando1 ( condicion3 ) {
3 ... 8 comando3
4 } else { 9 ...
5 comando2 10 } else {
6 ... 11 comando4
7 } 12 ...
13 }
Condicional si. . . entonces (if )
Para ilustrar el uso de los condicionales, calculamos las raíces de una ecuación de
segundo grado
√
−b ± b2 − 4ac
P2 (x ) = ax 2
+ bx + c x1,2 =
2 a
1 x1 <- ( -b + sqrt ( b ^2 -4 * a * c ) ) / ( 2 * a )
2 x2 <- ( -b - sqrt ( b ^2 -4 * a * c ) ) / ( 2 * a )
¾Qué sucede si a es cero?
Condicional si. . . entonces (if )
Para ilustrar el uso de los condicionales, calculamos las raíces de una ecuación de
segundo grado
√
−b ± b2 − 4ac
P2 (x ) = ax 2
+ bx + c x1,2 =
2 a
1 x1 <- ( -b + sqrt ( b ^2 -4 * a * c ) ) / ( 2 * a )
2 x2 <- ( -b - sqrt ( b ^2 -4 * a * c ) ) / ( 2 * a )
¾Qué sucede si a es cero?
1 if ( a == 0 ) {
2 x1 <- -c / b
3 x2 <- x1
4 } else {
5 x1 = ( -b + sqrt ( b ^2 -4 * a * c ) ) / ( 2 * a )
6 x2 = ( -b - sqrt ( b ^2 -4 * a * c ) ) / ( 2 * a )
7 }
1 if ( a == 0 ) {
2 if ( b == 0 ) {
3 stop ( 'P no tiene raices ')
4 } else {
5 x1 <- -c / b
6 x2 <- x1
7 }
8 } else {
9 x1 = ( -b + sqrt ( b ^2 -4 * a * c ) ) / ( 2 * a )
10 x2 = ( -b - sqrt ( b ^2 -4 * a * c ) ) / ( 2 * a )
11 }
¾Qué sucede si el discriminante d = b2 − 4ac es positivo, cero ó negativo?
Condicional si. . . entonces (if )
1 if ( a == 0 ) {
2 if ( b == 0 ) {
3 stop ( 'P no tiene raices ')
4 } else {
5 x1 <- -c / b
6 x2 <- x1
7 }
8 } else {
9 d <- b ^2 - 4 * a * c
10 if ( d == 0 ) {
11 x1 <- -b / ( 2 * a )
12 x2 <- x1
13 } else if ( d > 0 ) {
14 x1 <- ( -b + sqrt ( d ) ) / ( 2*a )
15 x2 <- ( -b - sqrt ( d ) ) / ( 2*a )
16 } else {
17 x1 = ( -b + i * sqrt ( - d ) ) / ( 2*a )
18 x2 = ( -b - i * sqrt ( - d ) ) / ( 2*a )
19 }
20 }
Condicional si-entonces (ifelse)
Este comando repite la secuencia de comandos entre las palabras claves while { y }
siempre que se cumpla la condición del ciclo, su sintaxis es
1 while ( condici ó n ) {
2 comando1
3 ...
4 }
Algunos comentarios
Los ciclos se pueden interrumpir en cualquier momento con el
comando break (romper).
Parte del ciclo puede ser saltado con el comando next
De ser posible, evitar el uso de ciclos: una fortaleza de este lenguaje es
justamente vectorizar las operaciones repetitivas.
dodgerblue
4 3
darkgreen
5 2
magenta
purple
yellow
brown
green
6 1
black
gray
gold
blue
red
7 12
8 11
9 10
dodgerblue
4 3
darkgreen
5 2
magenta
purple
yellow
brown
green
6 1
black
gray
gold
blue
red
7 12
8 11
9 10
1.0
0.5
●
0.0
y
−0.5
●
−1.0
−1.5
●
1 2 3 4 5
Index
Grácas
Los comando para gracar en realidad también son funciones que reciben
como entrada, los datos a gracar y las características a aplicar sobre ella.
La salida generalmente es un gráco y/o un objeto gracable.
A título de ejemplo, el comando plot puede ser invocado de varias maneras
1 plot(y)
2 plot(x, y) ●
1.0
0.5
●
0.0
y
−0.5
●
−1.0
−1.5
●
x
Grácas
Los comando para gracar en realidad también son funciones que reciben
como entrada, los datos a gracar y las características a aplicar sobre ella.
La salida generalmente es un gráco y/o un objeto gracable.
A título de ejemplo, el comando plot puede ser invocado de varias maneras
1 plot(y)
2 plot(x, y) ●
1.0
3 plot(x,y,col='blue',bg='red',
0.5
●
●
pch=21,lwd=3,cex=2)
0.0
y
−0.5
●
−1.0
−1.5
●
0.0 0.2 0.4 0.6 0.8 1.0
x
Grácas
Los comando para gracar en realidad también son funciones que reciben
como entrada, los datos a gracar y las características a aplicar sobre ella.
La salida generalmente es un gráco y/o un objeto gracable.
A título de ejemplo, el comando plot puede ser invocado de varias maneras
1 plot(y)
Exp. 1
2 plot(x, y) ●
1.0
3 plot(x,y,col='blue',bg='red',
0.5
●
●
pch=21,lwd=3,cex=2)
0.0
Efecto
plot(x, y, col='blue',
−0.5
4 ●
−1.0
bg='red', pch=21, lwd=3,
−1.5
cex=2, xlab="Densidad", ●
Densidad
Grácas
Los comando para gracar en realidad también son funciones que reciben
como entrada, los datos a gracar y las características a aplicar sobre ella.
La salida generalmente es un gráco y/o un objeto gracable.
A título de ejemplo, el comando plot puede ser invocado de varias maneras
1 plot(y)
Exp. 1
2 plot(x, y) ●
1.0
3 plot(x,y,col='blue',bg='red',
0.5
●
●
pch=21,lwd=3,cex=2)
0.0
Efecto
plot(x, y, col='blue',
−0.5
4 ●
−1.0
bg='red', pch=21, lwd=3,
−1.5
cex=2, xlab="Densidad", ●
Densidad
1.0
3 plot(x,y,col='blue',bg='red',
0.5
●
●
pch=21,lwd=3,cex=2)
0.0
Efecto
plot(x, y, col='blue',
−0.5
4 ●
−1.0
bg='red', pch=21, lwd=3,
−1.5
cex=2, xlab="Densidad", ●
Densidad
0.5
●
●
−0.5
●
−1.5
1 2 3 4 5
Index
Tipo de grácas
0.5
●
●
−0.5
●
−1.5
1 2 3 4 5
Index
Tipo de grácas
3 plot(y, type="b")
0.5
●
●
−0.5
●
−1.5
1 2 3 4 5
Index
Tipo de grácas
0.5
4 plot(y, type="c") y
−0.5
−1.5
1 2 3 4 5
Index
Tipo de grácas
0.5
4 plot(y, type="c") y
−0.5
5 plot(y, type="l") −1.5
1 2 3 4 5
Index
Tipo de grácas
0.5
4 plot(y, type="c") y
−0.5
5 plot(y, type="l")
6 plot(y, type="h")
−1.5
1 2 3 4 5
Index
Tipo de grácas
0.5
4 plot(y, type="c") y
−0.5
5 plot(y, type="l")
6 plot(y, type="h")
−1.5
7 plot(y, type="s") 1 2 3 4 5
Index
Tipo de grácas
0.5
4 plot(y, type="c") y
−0.5
5 plot(y, type="l")
6 plot(y, type="h")
−1.5
7 plot(y, type="s") 1 2 3 4 5
● ● ●
16 17 18 19 20
●
11 12 13 14 15
●
6 7 8 9 10
1 2 3 4 5
●
Características de las grácas
●
●
● ● ●
2
● ●
● ●
● ●● ●
● ● ● ● ●
● ●● ●● ●●
●● ●
●●● ●
1
● ●● ● ●●
● ● ● ●●● ●●●
● ● ●●
plot(x, y)
●● ●● ●●
●
● ● ●
● ●● ● ●
●
●● ● ● ● ●
● ● ●● ●
● ●● ●
y
● ● ●
●● ●●●●● ●● ● ● ● ● ● ●
0
●
● ● ●● ●●● ●●●● ● ● ●● ●
●● ●● ●
● ● ● ● ●
●●●● ● ● ●● ● ● ●
●●● ● ● ●
● ●●●
●● ● ● ●●●●● ● ● ● ●
−1
● ● ● ●
● ●
●●● ● ● ● ● ●
● ● ● ●
● ● ● ● ● ● ● ●
● ●● ● ●
−2
● ● ●●
●
●
−3 −2 −1 0 1 2
x
Muestra 200
Características de las grácas
●
●
● ● ●
2
●●
● ●
● ●
● ●●● ● ● ●
● ●● ● ● ● ●
●● ●
●●● ●
1
●
●
● ● ●●●● ●●● ●
●
●
●
● ● ●●
plot(x, y, asp=1)
●● ●● ● ●
●
●● ●● ●
● ● ●
●
● ● ●●
● ● ●●● ●● ●●
y
● ●● ●● ●● ●● ●●● ● ●
0
●●●●
●● ●● ●●●●● ●● ●●● ●● ●
● ●●
● ● ●● ● ●● ●● ●
● ●●
●● ● ●● ● ●
● ● ● ●
●● ● ●●●●●●● ●● ● ● ●
−1
●● ●
● ●●● ●● ● ●●
● ● ● ●
●
● ●● ● ●● ● ●
● ●● ● ●
−2
●
● ● ●●
●
−4 −2 0 2 4
x
Muestra 200
Características de las grácas
4
●
●
● ● ● ● ●●
2
● ●
● ● ●● ● ● ● ●
plot(x, y, xlim=c(-4,4),
● ● ● ●● ●● ●
●●● ● ● ●
● ● ●●● ●●● ●● ● ●●
●
●● ● ● ● ●
● ●●
● ●
● ●
● ● ●● ● ● ●
● ●● ● ●
●● ●●● ● ●● ●● ●● ●●●● ●●● ●●●
● ●
0
●
y
● ●●
●●●● ●●
● ● ● ●
● ● ● ●
●● ●● ●● ● ● ●
● ●● ● ●● ●●
ylim=c(-4,4))
● ●● ●●● ●
●
●
●●
●● ● ● ●●
● ●●●●
● ●● ●● ●
● ● ●●● ●
● ●●
● ●
●●
● ● ●● ● ●
● ●● ●
−2
●● ●
●● ● ●●
●
−4
−4 −2 0 2 4
x
Muestra 200
Características de las grácas
4
●
●
● ●● ●
plot(x, y, asp=1,
●
2
● ● ●●● ●
● ● ●● ●● ●●
●
●●●● ●
● ●
●
●●●●●●
● ● ●● ●
●
●
●
● ● ●●
xlim=c(-4,4),
●●
● ● ●
●● ●
●●
●
●●● ●
● ●●
●● ●●●●
●
●
●●● ●●
●
●●●●●●●●●
0
●
y
● ●●
●●
●
●●●●
●●●● ●
● ● ● ● ● ●●
● ● ●● ● ● ●
●●●●●●
●● ●
●● ●
●
● ●
●
●
●●●●●●
●●
●●
●●●
● ●●●●●● ●●
●●
●
ylim=c(-4,4))
● ● ●●
● ●●● ●
●●● ●● ● ●
−2
●● ● ●●
●
−4
−6 −4 −2 0 2 4 6
x
Muestra 200
Características de las grácas
●
●
● ● ●
● ●
● ●
● ●● ●
● ● ● ● ●
● ●● ●● ●●
●● ●
●●● ●
● ●● ● ●●
● ● ● ●●● ●●●
● ● ●●
plot(x, y, axes=FALSE)
●● ●● ●●
●
● ● ●
● ●● ● ●
●
●● ● ● ● ●
● ● ●● ●
● ●● ●
y
● ● ●
● ●● ●●●●● ●● ● ● ● ● ● ●
● ● ●● ●●● ●●●● ● ● ●● ●
●● ●● ●
● ● ● ● ●
●●●● ● ● ●● ● ● ●
●●● ● ● ●
● ●●●
●● ● ● ●●●●● ● ● ● ● ● ●
● ● ● ● ●
● ● ●
●●●● ● ●
● ●
● ● ● ● ● ● ● ●
● ●● ● ●
● ● ●●
●
●
x
Muestra 200
Grácas de barras
12
10
8
barplot(H) 6
4
2
0
Grácas de barras
12
10
barplot(H, names.arg =
8
6
LETTERS[seq_along(H)]) 4
2
0
A B C D E F G H I J K L
Grácas de barras
J K L
H I
barplot(H, horiz = TRUE) E F
C
A
0 2 4 6 8 10 12
Grácas de barras
12
10
8
barplot(H, col='dodgerblue') 6
4
2
0
A B C D E F G H I J K L
Grácas de barras
12
10
8
barplot(cbind(H,G), beside =
6
TRUE) 4
2
0
H G
Grácas de barras
12
10
8
barplot(t(cbind(H,G)), beside =
6
TRUE) 4
2
0
A B C D E F G H I J K L
Grácas de barras
60
50
40
barplot(cbind(H,G)) 30
20
10
0
H G
Diagramas de tortas
2
3
pie(P)
4
6
5
Diagramas de tortas
B
C
A
pie(P, labels = LETTERS,
col=rainbow(length(P)),
main='Diagrama de torta') D
F