You are on page 1of 14

Notas de introducción a R

Benjamín López

¾Qué es R?
R es un lenguaje y entorno de programación para análisis estadístico y gráco. Se trata de un proyecto de

software libre, resultado de la implementación GNU del lengua je S. R y S-Plus -versión comercial de S- son,

probablemente, los dos lenguajes más utilizados en investigación por la comunidad estadística, siendo además

muy populares en el campo de la investigación biomédica, la bioinformática y las matemáticas nancieras.

0.1. Obteniendo R

R se puede descargar gratuitamente en la página ocial del proyecto http://www.r-project.org/

0.2. Comenzando con R

Al iniciar R, lo primero que se mostrará en la consola es lo siguiente:


R output
R version 2.15.2 (2012-10-26) -- "Trick or Treat"
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-w64-mingw32/x64 (64-bit)

R es un software libre y viene sin GARANTIA ALGUNA.


Usted puede redistribuirlo bajo ciertas circunstancias.
Escriba 'license()' o 'licence()' para detalles de distribucion.

R es un proyecto colaborativo con muchos contribuyentes.


Escriba 'contributors()' para obtener más información y
'citation()' para saber cómo citar R o paquetes de R en publicaciones.

Escriba 'demo()' para demostraciones, 'help()' para el sistema on-line de ayuda,


o 'help.start()' para abrir el sistema de ayuda HTML con su navegador.
Escriba 'q()' para salir de R.

[Previously saved workspace restored]

>
R output
Se muestra el número de la versión y alguna información útil para nuevos usuarios como, por ejemplo, instruc-

ciones para salir de R usando la línea de comandos.

Cuando R comienza, busca si hay trabajo guardado en el directorio de traba jo y de encontrarlo, lo carga en la

sesión actual.

Lo último que se muestra es la línea de comando >, que es donde se escribirán los comandos que serán procesados
por R.

0.3. Utilizando R como una calculadora

0.3.1. Operaciones aritméticas básicas


Un simple uso que se le puede dar a R es el de realizar operaciones aritméticas básicas, como se haría con
cualquier calculadora. Rutiliza la notación usual para las operaciones matemáticas, como son +,-,* y / Las
potencias se expresan como  o ** y, como es usual, se agrupan las operaciones por medio de paréntesis.

En el siguiente ejemplo, se muestra una serie de operaciones en R. Se introduce una instrucción en la línea de

comando y presionando Enter ê .

Se pueden escribir múltiples comandos en uns línea separándolos por un punto y coma ;.

1
0.4 Advertencias y errores

Se transcribe este ejemplo tal y como se vería en la consola de R, si se desean reproducir estos ejemplos, de debe
omitir la línea de comando >
R input-output
> 2+5
[1] 7
> 4-9
[1] -5
> 7*8
[1] 56
> (4-6)*5
[1] -10
> 5^3
[1] 125
> 5**3
[1] 125
R input-output

La respuesta a cada una de éstas "preguntas" se imprime antecedida por [1], esta notación adquirirá sentido

una vez que se manejen vectores de datos.

0.3.2. Algunas otras funciones


Muchas funciones matemáticas y estadísticas están disponibles en R. Se utilizan de manera similar. Cada

función tiene un nombre y este se introduce seguido de paréntesis (necesariamente) y los argumentos de la

función se escriben detro de ellos según se necesiten.

Se muestran a continuación algunas funciones familiares. Nótese que en R, el caracter de comentario es #, es

decir, todo el texto que preceda a este símbolo será ignorado por R. En el siguiente ejemplo, los comentarios

serán añadidos para ayudar a la comprensión de las funciones, sin embargo, pueden ser omitidos al reproducir

éstos ejemplos.
R input-output
> sqrt(5) # Raíz cuadrada
[1] 2.236068
> cos(pi/2) # La función coseno
[1] 6.123032e-17 # Esto es cero!
> exp(1) # Esto es exp(x) = e^x
[1] 2.718282
> log(10) # Logaritmo natural
[1] 2.302585
R input-output

El resultado que se obtiene de cos(pi/2), es decir de cos π
2 es 6.123032e-17, es decir, 6.123032  1017 que

es muy pequeño, pero no nos da exactamente cero, este tipo de diferencias numéricas no son extrañas.

Muchas funciones en R tienen argumentos extra que nos permiten cambiar el comportamiento predeterminado

de las funciones, en el ejemplo anterior, se puede observar que la función log es la función logaritmo natural,

sin embargo, si se quisiera utilizar la función logaritmo con base 10, se puede hacer lo siguiente
R input-output
> log(10,10)
[1] 1
> log(10,base=10)
[1] 1
R input-output
Para entender el uso de la primera expresión, log(10,10), se debe tomar en cuenta que para esta función, R
utilizará el segundo argumento como la base del logaritmo y que en caso de ser omitido, en este caso usará la

base e. En el segundo comando, log(10,base=10), se utiliza indicando explícitamente el nombre del argumento
para indicar que se trata de la base.

0.4. Advertencias y errores

Cuando R se encuentra con un comando que no puede reconocer, responderá con un mensa je de error según
sea el caso, por ejemplo
R input-output
> raizcuadrada(45)
Error: no se pudo encontrar la función "raizcuadrada"
> sqrt 45

2
0.5 Obteniendo ayuda

Error: inesperado constante numérica en "sqrt 45"


> sqrt(-45)
[1] NaN
Mensajes de aviso perdidos
In sqrt(-45) : Se han producido NaNs
> sqrt(45 # El +, asi como el > no se escribe al reproducir esto
+ )
[1] 6.708204
R input-output
El primer comando produjo un Error: y no da ningún resultado, dado que R no encontró una función con ese

nombre. En el segundo comando, se omitieron los paréntesis al aplicar la función por lo que se produce un error

de sintaxis, se necesita poner los paréntesis para indicar el uso de una función. En el tercer comando, R da una

respuesta pero supone que no es lo que se buscaba, la salida NaN signica not a number en respuesta a la

raíz cuadrada de un número negativo, por lo que se imprime una advertencia Warning o Mensajes de aviso
perdidos. En el último comando, se omitió un paréntesis por lo que en la siguiente línea se imprime + para
indicar que R espera que se termine de introducir la operación.

0.5. Obteniendo ayuda

Utilizar R de manera extensa requiere del conocimiento de muchas de sus funciones, en ocasiones más de

las que se pueden tener en la mente en cualquier momento, por suerte, R tiene recursos de ayuda integrados.

Estos pueden ser consultados para obtener información de funciones como por ejemplo acerca de los valores que

regresa, parámetros adicionales o ejemplos de su uso,

La función help() es la interface principal del sistema de ayuda. Por ejemplo, help("sum") dará información
acerca de la función sum(). Un ata jo útil para la función help() es el uso de ?, es decir, volviendo al ejemplo
anterior, sería lo mismo escribir ?sum o ?"sum". La forma entrecomillada es necesaria para algunas funciones.

Lo anterior funciona de manera muy adecuada cuando se recuerda el nombre preciso de la función deseada, en el

caso de no saber o no recordar el nombre preciso, hay otras maneras de buscar ayuda. La función help.search()
buscará en cada archivo de ayuda el término especicado, por ejemplo, help.search("variance") regresará
tods las funciones que tengan el término variance en alguna parte de su página de ayuda. Para hacer una

búsqueda de en sólo el nombre de la función, existe la función apropos(), es decir, esta función buscará entre

todas los nombres de funciones y variables disponibles y regresará aquellas que coinciden con el término buscado.

Por ejemplo, apropos("cov") regresará todas las funciones y variables que tengan en su nombre la palabra

"cov".

Si lo que se quiere es explorar el contenido de las páginas de ayuda, existe la función help.start(), que al

ejecutarla abrirá un navegador web con un índice de los documentos de ayuda disponibles, incluyendo algunos

manuales, si es que éstos últimos se han instalado.

Muchas de las páginas de ayuda incluyen algunos ejemplos que pueden ser ejecutados uno por uno copiándolos

en la consola o todos ellos utilizando la función example(). Por ejemplo example(mean)

0.6. Recuperación y corrección de órdenes previas

Las echas verticales del teclado pueden utilizarse para recorrer el historial de órdenes. Cuando se haya

recuperado una orden con este procedimiento, se pueden utilizar las echas horizontales para desplazarse por

ella, se pueden eliminar caracteres, o añadir nuevos caracteres.

La consola de R conserva un historial de los comandos introducidos. De manera individual, los comandos

pueden ser accesados utilizando las echas arriba o aba jo. Haciendo esto repetidamente, se puede desplazarse

en este historial de instrucciones. Esto puede ser bastante útil para reutilizar comandos previos, por ejemplo,

para corregir un pequeño error que se hubiera cometido en una instrucción. La función history() muestra las

últimas 25 instrucciones que se le han ejecutado. A continuación se muestra una tabla de ata jos para la edición

de comandos.

Ò ó (Ctrl+p)
Llama a la instrucción anterior realizada en la consola, se puede presionar en

varias ocasiones para desplazarse hacia atrás en el historial de comandos

Ó ó (Ctrl+n) Se utiliza para desplazarse hacia adelante en el historial de comandos

Ð Mueve el cursor hacia la izquierda en la instrucción que se encuentra en ese

momento en la línea de comando

Ñ Mueve el cursor hacia la derecha en la instrucción que se encuentra en ese

momento en la línea de comando

Inicio ó (Ctrl+a) Mueve el cursor al inicio de la linea

Fin ó (Ctrl+e) Mueve el cursor al nal de la línea

3
0.7 Scripts 1 ASIGNACIÓN DE DATOS EN R

0.7. Scripts

En la mayoría de los casos es muy complicado tener que escribir los comandos directamente en la consola

porque los códigos son muy largos o porque se encuentran en un proceso de estructuración. Para esto, R tiene la
posibilidad de crear un archivo de texto plano en el cualse escribe el código para después correrlo completo o por

partes en la consola, al que se llama script. Para crear un script nuevo, se da click en la Barra de herramientas

en Archivo y en el menú que se despliega, dar click en Nuevo Script y se abrirá el documento en blanco en

donde se pueden escribir múltiples líneas de código sin tener que correrlas en la consola.

Para correr el código que se ha escrito en un script, se selecciona la parte del código que se desea ejecutar y

después se presiona Ctrl+r, de esta forma, R copiará el código al portapapeles y lo pegará en la consola.

Si se desea cambiar el directorio de trabajo, que es la carpeta en la cual R buscará y guardará los archi-
vos de la sesión actual. Se puede utilizar la función getwd() para conocer el directorio de trabajo (se usa
sin parámetros) y para cambiarlo existe la función setwd(), por ejemplo, si se quiere cambiar a la carpeta
C:\Users\Benja\Documents\Curso R Congreso, se escribirá en la consola

Código de R
setwd("C:/Users/Benja/Documents/Curso R Congreso")
Código de R

1. Asignación de datos en R
Las entidades que R crea y manipula se denominan ob jetos. Estos pueden ser de muchos tipos: variables,

variables indexadas, cadenas de caracteres, funciones, etc. Incluso estructuras más complejas construidas a partir

de otras más sencillas. Durante una sesión de traba jo con R los ob jetos que se crean se almacenan por nombre.

Asignar o crear un ob jeto no produce una salida impresa en la pantalla. Para crear un objeto en R que tenga el

valor de 2 y tenga nombre x se puede hacer lo siguiente


Código de R
x=2
x<-2
x<<-2
2->x
2->>x
Código de R
Se puede pedir a R el valor de un objeto escribiendo sólo su nombre en la linea de comandos, en el caso de

cualquiera de los comandos anteriores se obtendrá


R input-output
> x
[1] 2
R input-output
Para imprimir el valor de una asignación se pueden añadir paréntesis alrededor de ella o utilizando la función

print(), por ejemplo

R input-output
> x<-5-3 # Asignación "silenciosa"
> x # Preguntando el valor de la variable
[1] 2
> (y=45/9) # Se muestra el valor de la asignación
[1] 5
> print(4^2->>z) # También imprime el valor de la asignación
[1] 16
R input-output
Entonces, se tienen los siguientes comandos de asignación

=
<- Asignación hacia la izquierda

<<-
->
Asignación hacia la derecha
->>

1.1. Nombrando ob jetos

Para nombrar objetos, R acepta letras, números y puntos en los nombres, con algunas restricciones. No se

puede empezar el nombre de una objeto con un número y si el nombre de un ob jeto empieza con un punto (un

sólo punto es válido como nombre para R) el siguiente caracter no pude ser un número. Por ejemplo:

4
1.2 Vectores de datos con el comando c() 1 ASIGNACIÓN DE DATOS EN R

Código de R
x=3
X=9
.hola.<-7.4
x1<-6
x2=0
nombre.largo.para.un.objeto<<-1
Código de R
Entonces, si preguntamos los valores de estas variables a R, se obtendrá lo siguiente
R input-output
> x
[1] 3
> X
[1] 9
> .hola.
[1] 7.4
> x1
[1] 6
> x2
[1] 0
> nombre.largo.para.un.objeto
[1] 1
> (nombre.largo.para.un.objeto+.hola.)*x1
[1] 50.4
R input-output
Cabe mencionar que R distingue entre mayúsculas y minúsculas en los nombres de los ob jetos.

1.2. Vectores de datos con el comando c()


En muchas ocasiones se tendrá un conjunto de datos con varias entradas con las cuales se quiere trabajar,

por ejemplo, el conjunto de observaciones de un fenómeno que se quiere estudiar

Se tienen las siguientes observaciones de un fenómeno

101 106 122 68 51 123 108 90 118 98

Para guardar éstos datos en R, se usa un vector de datos. Los vectores de datos se crean con la función c()
que combina los argumentos de un conjunto de datos. El conjunto de observaciones anterior se puede guardar

en una variable de nombre muestra de la siguiente manera


Código de R
muestra = c(101, 106, 122, 68, 51, 123, 108, 90, 118, 98)
Código de R
Los valores se separan por una coma. Una vez guardado los valores, se pueden imprimir en la pantalla introdu-

ciendo el nombre de la variable en la consola


R input-output
> muestra = c(101, 106, 122, 68, 51, 123, 108, 90, 118, 98)
> muestra
[1] 101 106 122 68 51 123 108 90 118 98
R input-output
Al inicio de la muestra se imprime [1] que hace referencia a que la observación a la derecha de este texto es

la primera observación, esto es útil cuando se tienen múltiples líneas, por ejemplo, supóngase que se tienen 60

observaciones de otro fenómeno (que se introduce a R de manera similar que en el ejemplo anterior usando el

comando c()) en una variable de nombre muestra2 y al imprimirlo en pantalla se muestra lo siguiente.
R input-output
> muestra2
[1] 119 58 111 113 116 66 79 130 87 15 21 94 60 67 28 115 145 85 83 62 25
[22] 135 72 104 176 123 145 122 40 54 62 44 61 135 53 84 83 18 83 37 123 137
[43] 142 98 34 125 89 39 141 105 102 38 63 137 112 46 93 69 199 126
R input-output
Esto signica que, como se muestra el valor [1] al inicio de la primera línea, entonces el primer renglón

empieza con el primer valor. Como el segundo renglón muestra [22], entonces el primer valor del segundo

renglón es el valor número 22 del vector de datos y como el tercer renglón comienza con [43], signica que el

primer valor del tercer renglón es el valor 43 de la muestra.

El comando c() también puede ser usado para combinar vectores de datos, por ejemplo

5
1.2 Vectores de datos con el comando c() 1 ASIGNACIÓN DE DATOS EN R

R input-output
> x = c(101, 106, 122, 68, 51)
> y = c(123, 108, 90, 118, 98)
> c(x,y)
[1] 101 106 122 68 51 123 108 90 118 98
R input-output

1.2.1. Tipo de vectores de datos


Una restricción sobre los vectores de datos es que todos las entradas deben ser del mismo tipo de variable.

Esto es, como por ejemplo en la variable a denida como


R input-output
a = c("gato","perro")
R input-output
que es un vector de caracteres, o otro tipo de varables. Las cadenas de caracteres se crean entrecomillándolas

(ya sea con " o con ').


Si se mezclan dos vectores de datos con entradas de distinto tipo, R forzará a que sean del mismo tipo, resultando
usualmente en un vector de caracteres y esto causar problemas al intentar hacer operaciones, a continuación se

muestra un ejemplo de este error


R input-output
> (err = c(a,x))
[1] "gato" "perro" "101" "106" "122" "68" "51"
> err+2
Error en err + 2 : argumento no-numérico para operador binario
R input-output
El vector err es un vector de cadenas de caracteres para el cual la operación suma no tiene sentido.

1.2.2. Funciones sobre vectores de datos


Una vez que se han guardado los datos en vectores, se pueden usar funciones sobre ellos. Muchas funciones

enR tienen nombres intuitivos. Por ejemplo, la función sum() sumará todos las entradas del vector y la función
length() regresará la longitud o numero de entradas que conforman al vector al que se aplica la función. A
continuación se muestran algunos ejemplos
R input-output
> sum(muestra) # Suma de las entradas del vector
[1] 985
> length(muestra) # Longitud del vector
[1] 10
> sum(muestra)/length(muestra) # Promedio de las entradas del vector
[1] 98.5
> mean(muestra) # Función integrada para sacar el promedio
[1] 98.5
R input-output
Se puede encontrar el promedio de las entradas del vector dividiendo la suma de todas las entradas y dividiendo

entre el número de entradas o utilizando la función mean(). R tiene muchas funciones integradas para hacer

una variedad de operaciones. Algunas otras funciones comunes son sort(), min(), max(), range(), diff() y

cumsum().
R input-output
> sort(muestra) # Ordena los valores de las entradas del vector
[1] 51 68 90 98 101 106 108 118 122 123
> min(muestra) # Regresa el valor mínimo
[1] 51
> max(muestra) # Regresa el valor máximo
[1] 123
> range(muestra) # Regresa un vector, la primera entrada es el mínimo, la segunda el máximo
[1] 51 123
> diff(muestra) # Regresa la diferencia entre entradas consecutivas del vector
[1] 5 16 -54 -17 72 -15 -18 28 -20
> cumsum(muestra) # La suma acumulada de las entradas
[1] 101 207 329 397 448 571 679 769 887 985
R input-output

6
1.2 Vectores de datos con el comando c() 1 ASIGNACIÓN DE DATOS EN R

1.2.3. Vectorización de funciones


Realizar operaciones aritméticas en R es más sencillo con la vectorización de las funciones. Es decir las

operaciones entre vectores se realizarán entrada por entrada al mismo tiempo. Por ejemplo, si se tiene el

siguiente vector
Código de R
b = c(84, 98, 85, 55, 84, 96, 88, 92, 86, 101)
Código de R
Entonces, para hacer la suma entrada por entrada, es decir, la primera entrada del vector muestra con la

primer entrada del vector b, la segunda entrada con la segunda entrada y así sucesivamente, se tiene que hacer

lo siguiente
R input-output
> muestra + b
[1] 185 204 207 123 135 219 196 182 204 199
R input-output
Algunos ejemplos de operaciones se muestran a continuación
R input-output
> muestra - b
[1] 17 8 37 13 -33 27 20 -2 32 -3
> muestra-100
[1] 1 6 22 -32 -49 23 8 -10 18 -2
R input-output
En el último ejemplo se opera un vector con un valor simple, en este caso, R repite el valor simple hasta completar
la longitud del vector, por lo que resta el mismo valor a cada entrada. A esto se le llama reciclaje de datos.
Para que funcione correctamente, la longitud de uno de los vectores que se están operando debe ser múltiplo de

la longitud del otro, por ejemplo


R input-output
> muestra - c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)
[1] 100 104 119 64 46 117 101 82 109 88 90 94 109 54 36 107 91 72 99 78
R input-output
en este caso la longitud del primer vector es menor que la del segundo. En caso de no ser así, R regresará un

error
R input-output
> muestra-c(1,2,3)
[1] 100 104 119 67 49 120 107 88 115 97
Mensajes de aviso perdidos
In muestra - c(1, 2, 3) :
longitud de objeto mayor no es múltiplo de la longitud de uno menor
R input-output
Otro ejemplo, es calcular la varianza de un vector de datos usando operciones con vectores, recordando que la

varianza muestral está dada por

pxq 
¸
n
xip  x̄q2
n1
Var

i1
R input-output
> x <- c(7, 16, 9, 3, 18)
> (n = length(x)) # La longitud del vector de datos
[1] 5
> xbar = mean(x) # El valor promedio
> x - xbar # Las diferencias de la media
[1] -3.6 5.4 -1.6 -7.6 7.4
> (x - xbar)^2 # Las diferencias cuadradas
[1] 12.96 29.16 2.56 57.76 54.76
> sum((x - xbar)^2) # Suma de las diferencias cuadradas
[1] 157.2
> sum((x - xbar)^2)/(n-1) # La varianza
[1] 39.3
> var(x) # Usando el comando automático de R
[1] 39.3
R input-output

7
1.3 Matrices en R 2 ACCESANDO A LOS DATOS UTILIZANDO ÍNDICES

1.3. Matrices en R

Para crear matrices en R, matrix()


existe el comando
R input-output
> matrix(c(1,2,3,4,5,6,7,8,9,10,11,12),nrow=3,ncol=4,byrow=FALSE) -> m
> m
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
R input-output

2. Accesando a los datos utilizando índices


Accsesar a las entradas de los vactores de datos o matrices en R es bastante sencillo. Cada entrada es

referenciada utilizando su índice y usando corchetes. Utilizando los índices, se puede accsear y asignar valores

guardados en un vector de datos. Por ejemplo, para accesar a las entradas de la variable muestra se puede hacer
lo siguiente
R input-output
> muestra # Vector completo
[1] 101 106 122 68 51 123 108 90 118 98
> muestra[1] # Valor de la primera entrada
[1] 101
> muestra[2] # Valor de la segunda entrada
[1] 106
> muestra[length(muestra)] # Valor de la última entrada si la long es desconocida
[1] 98
> muestra[1]<- 120 # Modificando el valor de la primera entrada
> muestra # Vector resultante
[1] 120 106 122 68 51 123 108 90 118 98
R input-output
En el caso de matrices, se tiene que dar la ubicación primero por renglón y luego por columna, por ejemplo
R input-output
> m # Matriz completa
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> m[1,3] # Primer renglón, tercera columna
[1] 7
> m[2,2] # Segundo renglón, segunda columna
[1] 5
> m[3,4] # Tercer renglón, cuarta columna
[1] 12
> m[2,3]<-25 # Modificando la entrada (2,3)
> m #Matriz resultante
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 25 11
[3,] 3 6 9 12
R input-output
Para accesar a un renglón simplemente se omite la información de la posición de columna, por ejemplo
R input-output
> m[1,] # Vector de datos del primer renglón
[1] 1 4 7 10
> m[3,] # Vector de datos del tercer renglón
[1] 3 6 9 12
> m[2,] # Vector de datos del segundo renglón
[1] 2 5 25 11
> m[2,] <- c(10,20,30,40) # Modificando todo el renglón
> m # Matriz resultante
[,1] [,2] [,3] [,4]

8
2.1 Seccionamiento de vectores de datos 3 CREANDO DATOS ESTRUCTURADOS

[1,] 1 4 7 10
[2,] 10 20 30 40
[3,] 3 6 9 12
R input-output
De manera similar para las columnas, es decir
R input-output
> m[,1] # Vector de datos de la primera columna
[1] 1 10 3
> m[,4] # Accesando la cuarta colunma
[1] 10 40 12
> m[,4]= c(1,2,3) # Modificando la cuarta columna
> m # Matriz resultante
[,1] [,2] [,3] [,4]
[1,] 1 4 7 1
[2,] 10 20 30 2
[3,] 3 6 9 3
R input-output

2.1. Seccionamiento de vectores de datos

R también permite el seccionamiento de datos o tomar varios elementos de un vector a la vez. Si x es un

vector de datos y vec es un vector de índices (que contiene valores sólamente entre 1 y length(x)), entonces

x[vec] es un nuevo vector correspondiente a esos índices. Por ejemplo


R input-output
> vec = c(2,3,6,7,9) # Vector de índices
> muestra[vec] # Entradas 2,3,6,7,9 del vector muestra
[1] 106 122 123 108 118
> muestra[c(1,4,5,8)] # Entradas 1,4,5,8 del vector muestra
[1] 120 68 51 90
> muestra[1:5] # Entradas de la 1 a la 5 del vector
[1] 120 106 122 68 51
R input-output
La última forma se explicará un poco más adelante

2.2. Índices negativos

Si el vector de índices contiene valores que corresponden a índices del vector, es algo intuitivo lo que R
regresará, sin embargo si se da un valor mayor al número de elementos del vector, R regresará NA, indicando que
el valor no está disponible (not available).

Sin embargo si se proporciona un valor o conjunto de valores negativos, R regresará los valores del vector, excep-
tuando el i-ésimo valor. Por ejemplo, muestra[-1] regresará todas las entradas del vector muestra exceptuando
el primer valor.
R input-output
> muestra[-1] # Omitiendo el primer valor
[1] 106 122 68 51 123 108 90 118 98
> muestra[-4] # Omitiendo el cuarto valor
[1] 120 106 122 51 123 108 90 118 98
> muestra[-c(1,3,5,7,9)] # Omitiendo los valores 1,3,5,7,9
[1] 106 68 123 90 98
> muestra[-(6:length(muestra))] # Omitiendo desde el valor 6 hasta el final
[1] 120 106 122 68 51
> muestra[-100] # Omite el valor 100, como no hay, no omite valores
[1] 120 106 122 68 51 123 108 90 118 98
R input-output

3. Creando datos estructurados


Algunas veces, es necesario utilizar conjuntos de números que tienen un patrón o secuencia, por ejemplo,

una secuancia de 1 a 99, que sería muy tedioso introducir a RSin



embargo, R tiene ata jos para introducir datos

secuenciales o repetidos de alguna manera.

9
3.1 Sucesiones 3 CREANDO DATOS ESTRUCTURADOS

3.1. Sucesiones

3.1.1. Sucesiones simples


Una secuencia de 1 a 99 avanzando de uno en uno en R puede ser generada introduciendo el comando R. El

operador dos puntos : a hasta b de uno en uno. Por ejemplo:


es usado para crear secuencias de
R input-output
> 1:20 # Sucesión simple
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> 138:147 # Iniciando en un valor distinto de 0 y 1
[1] 138 139 140 141 142 143 144 145 146 147
> -4:5 # Similar al anterior
[1] -4 -3 -2 -1 0 1 2 3 4 5
> 10:1 # Como a>b lo detecta y cuenta hacia atrás
[1] 10 9 8 7 6 5 4 3 2 1
> 4.45:15.75 # Nótese cómo avanza de 1 en 1 en este caso
[1] 4.45 5.45 6.45 7.45 8.45 9.45 10.45 11.45 12.45 13.45 14.45 15.45
R input-output

3.1.2. Sucesiones aritméticas


Una sucesión aritmética está determinada por un punto de inicio a, un tamaño de paso h, y un número de

elementos n. La secuencia está dada por

a, a h, a 2h, a 3h,    , a pn  1qh


En general, el i-ésimo término de la sucesión está dado por a ih con i  0, 1,    , n  1
. Esta secuencia puede

ser generada en R de la siguiente manera


R input-output
> a=1; h=5; n=7 # Usando ; para separar comandos, valores arbitrarios
> a+h*(0:(n-1)) # Nótese la diferencia entre 0:(n-1) y 0:n-1
[1] 1 6 11 16 21 26 31
R input-output

3.1.3. La función seq()


Muchas veces se requiere especicar tanto el tamaño de paso, el valor de inicio y el valor nal de una sucesión,

o especicar el punto de inicio, el punto nal y la longitud deseada de la sucesión aritmética. Para esto, se cuenta

con la función sec(). A continiación se muestran algunos ejemplos


R input-output
> seq(1,20,length=20) # Secuencia simple, similar a 1:20
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> seq(1,20,by=1) # Similar al anterior
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> seq(length=10, to = 20, from=5) # Del 5 al 20 en 10 pasos
[1] 5.000000 6.666667 8.333333 10.000000 11.666667 13.333333 15.000000
[8] 16.666667 18.333333 20.000000
> seq(length=5, to = 1, from=5) # Similar a 5:1
[1] 5 4 3 2 1
> seq(length=10, to = 7, from=2) # Hacia atrás en 10 pasos
[1] 2.000000 2.555556 3.111111 3.666667 4.222222 4.777778 5.333333 5.888889
[9] 6.444444 7.000000
R input-output

3.2. Repeticiones

Cuando se desea crear un vector de valores repetidos, se puede usar la función rep(). Su uso más simple es

el de repetir su primer argumento un número especicado de veces, por ejemplo


R input-output
> rep(1,10) # Repite el valor 1 diez veces
[1] 1 1 1 1 1 1 1 1 1 1
> rep(c(2,7),5) # Repite el vector (2,7), 5 veces
[1] 2 7 2 7 2 7 2 7 2 7
> rep(1:4,3) # Repite la secuencia 1:4 tres veces
[1] 1 2 3 4 1 2 3 4 1 2 3 4
> rep("gato",5) #Repite la cadena "gato" 5 veces
[1] "gato" "gato" "gato" "gato" "gato"
R input-output

10
4 TABLAS Y GRÁFICAS

Patrones un poco más complejos se pueden generar especicando pares de vectores de longitud igual. En este

caso, cada término es repetido el correspondiente número de veces especicado en el segundo.


R input-output
> rep(c("gato","perro"),c(2,1)) # Repite la primera entrada 2 veces y la segunda 1
[1] "gato" "gato" "perro"
> rep(c(4,5,6),c(3,2,6)) # Repite el correspondiente numero de veces
[1] 4 4 4 5 5 6 6 6 6 6 6
R input-output

4. Tablas y Grácas
4.1. Datos categóricos

Los datos categóricos son generalmente resumidos en tablas o representados grácamente con grácas de

barras, gráca de pay o pastel, ecétera.

4.1.1. Tablas
Las tablas son ampliamente utilizadas para resumir conjuntos de datos, por ejemplo, cuando una variable de

respuesta cae en un conjunto determinado de categorías, como encuestas de opinión o resultados de votaciones.

La función principal en R para generar este tipo de tablas es la función table(). En su uso más simple, la

función table(x) en cuentra los valores únicos en un vector de datos y tabula las frecuencias de su ocurrencia.

Por ejemplo, si los resultados de una pequeña encuesta son "sí", "sí", "no", "sí" y "no" pueden ser tabulados

de la siguiente manera
R input-output
> res = c("Sí","Sí","No","Sí","No")
> table(res)
res
No Sí
2 3
R input-output
Conjuntos de datos tan pequeños como el anterior pueden ser resumidos sin ayuda de una computadora. En el

siguiente ejemplo, se usará un registro del clima de algún mes y se obtuvieron los siguientes datos
R input-output
> clima
[1] "despejado" "despejado" "medio.nublado" "despejado" "despejado"
[6] "despejado" "medio.nublado" "nublado" "nublado" "nublado"
[11] "medio.nublado" "nublado" "nublado" "nublado" "medio.nublado"
[16] "medio.nublado" "despejado" "medio.nublado" "despejado" "despejado"
[21] "nublado" "despejado" "medio.nublado" "nublado" "medio.nublado"
[26] "nublado" "despejado" "medio.nublado" "medio.nublado" "despejado"
[31] "medio.nublado"
R input-output
Para generar una tabla simplemente se hace lo siguiente
R input-output
> table(clima)
clima
despejado medio.nublado nublado
11 11 9
R input-output

4.1.2. Grácas de barras


Los datos categóricostambién se pueden resumir de manera gráca. Quizá la manera más común es la gráca

de barras. Una gráca de barras, en su uso más simple, toma los valores de una tabla y representa con alturas

los valores de las distintas categorías. Para esto existe la función barplot(). Esta función utiliza la versión

resumida de los datos, comúnmente el resultado de el uso de la función table(). Los datos resumidos pueden

ser frecuencias absolutas o relativas, la gráca resultante será similar, con la diferencia de la escala del eje y.
Por ejemplo, se tiene el resultado de una encuesta cuyas respuestas están codicadas por 1,2,3 y 4. Las respuestas

obtenidas son:

3 4 1 1 3 4 3 3 1 3 2 1 2 1 2 3 2 3 1 1 1 1 4 3 1

Se utilizará el comando scan() para introducir los datos en R.

11
4.1 Datos categóricos 4 TABLAS Y GRÁFICAS

0.4
10
4

0.3
3

Título del eje y (Opcional)

Título del eje y (Opcional)


6

0.2
2

0.1
1

0.0
0

0
1 2 3 4 1 2 3 4

Título del eje x (Opcional) Título del eje x (Opcional)

Figura 1: La primer gráca es incorrecta pues los datos deben ser primero tabulados, en la segunda se muestra

el diagrama de las frecuencias absolutas y en el tercer diagrama, las frecuencias relativas

R input-output
> encuesta<-scan()
1: 3 4 1 1 3 4 3 3 1 3 2 1 2 1 2 3 2 3 1 1 1 1 4 3 1
26:
Read 25 items
> encuesta
[1] 3 4 1 1 3 4 3 3 1 3 2 1 2 1 2 3 2 3 1 1 1 1 4 3 1
> par(mfrow=c(1,3)) #Imprime gráficas en 1 renglón 3 cols
> barplot(encuesta) # Esto no es correcto!
> barplot(table(encuesta), # Histograma de frecuencias, se usa table()
+ xlab="Título del eje x (Opcional)", ylab="Título del eje y (Opcional)")
> barplot(table(encuesta)/length(encuesta), # Histograma de frecuencias relativas
+ xlab="Título del eje x (Opcional)", ylab="Título del eje y (Opcional)")
R input-output
En la gura 1 se muestra el resultado de estos comandos.

4.1.3. Grácas de pay o pastel


La gráca de pay o pastel es utilizada para representar las frecuencias relativaso proporciones de las distintas

posibles respuestas de una variable categórica. Esta gráca , así como la gráca de barras es ampliamente

utilizada en los medios de difusión de información.

La manera de crear una gráca de pay en R es más o menos similar a la manera de crearuna gráca de barras, pero
en este caso se utiliza la función pie(), utiliza argumentos similares para cambiar colores y agregar nombres.

Por ejemplo, se tiene una encuesta con 5 posibles respuestas A, B, C, D y E, codicadas, respectivamente como

1, 2, 3, 4 y 5las respuestas obtenidas fueron

4 2 3 2 1 2 3 3 3 3 4 3 5 3 3 2 2 4 3 2

Para generar el diagrama de pie, se realiza lo siguiente


R input-output
> respuesta<-scan()
1: 4 2 3 2 1 2 3 3 3 3 4 3 5 3 3 2 2 4 3 2
21:
Read 20 items
> (T = table(respuesta)) # Tabla de los resultados obtenidos en la encuesta
respuesta
1 2 3 4 5
1 6 9 3 1
> par(mfrow=c(1,2)) # Imprime gráficas en 1 renglón, dos columnas
> pie(T) # Hace la gráfica, pero pone los valores de codificación
> names(T) = c("A","B","C","D","E") # Arreglando la codificación de los nombres
> T # Tabla con los nombres ya ajustados
A B C D E

12
4.2 Datos de rango continuo 4 TABLAS Y GRÁFICAS

Encuesta

1 A

5 E

C
3
D
4

Figura 2: En el primer diagrama se muestran los nombres de la codicación, en la segunda se corrige este detalle

y se agrega el título al gráco

1 6 9 3 1
> pie(T, main="Encuesta") # Agregando, además el título del gráfico
R input-output
En la gura 2 se muestran las grácas resultantes de estos comandos.

4.2. Datos de rango continuo

Ahora se consideran las representaciones de conjuntos de datos que contienen medidas numéricas en una

escala virtualmente continua. Por supuesto, las medidas que se registran de un experimento siempre estarán

redondeadas en alguna medida. En contraste con el caso discreto, el conjunto de datos que se obtienen en este tipo

de fenómenos puede contener muchos distintos valores, por lo que los diagramas y tablas vistos anteriormente

no nos darían un buen resumen de los datos.

En esta sección, dado a la brevedad del curso, se hablará únicamente del histograma de frecuencias relativas.

4.2.1. Histograma
Un histograma es la representación visual de la distribución de un conjunto de datos. Es decir, se intenta

tener una idea acerca de cómo se comportan pensando en una función de densidad empírica. El histograma

tiene algunas similitudes con la gráca de barras, en el sentido que tambipen utiliza barras para indicar una

frecuencia, pero a diferencia del diagrama de barras, cada barra en el histograma representa la frecuencia de un

intervalo sobre el rango de las observaciones que se tienen.

La construccipon de un histograma se describe a continuación, Primero, se selecciona una colección de intervalos

contiguos disjuntos que contengan a todo el rango de la muestra. Después se cuenta el número de observaciones

que caen en los intervalos seleccionados. Finalmente, se dibuja una barra sobre el intervalo de tal manera que

el área de la barra sea proporcional a la frecuencia.

Cuando se elabora un histograma, se toma una desición acerca de cómo se va a dividir el rango de la muestra en

intervalos y cuán altas se dibujarán las barras, dado que únicamente tienen que estar la proporción correcta. R
tiene varios métodos para la selección de estos intervalos (Sturges, Scott y FreedmanDiaconis). Las dos maneras

de establecer la altura de las barras es l frecuencia absoluta del intervalo o aquella que haga al área de la barra

igual a la frecuencia relativa del intervalo. Ba jo este último método, el área total de las barras sumará 1, lo cual

es conveniente cuando se está pensando en ajustar el modelo de una distribución de probabilidad.

En la función hist(), la longitud de los intervalos está controlada por el parámetro breaks=. Este puede ser

especicado por el nombre un algoritmo que los genere, el número de intervalos deseados o la localización de

exacta de los extremos de los intervalos deseados (breaks). Por ejemplo, se tienen los siguientes datos:

R input-output
> datos
[1] 0.232 0.624 -0.236 -0.798 0.358 -1.088 -0.106 0.273 -0.708 0.474 0.562 0.672
[13] 0.605 -1.779 -0.123 -1.789 0.761 -2.288 1.032 0.490 -0.498 -0.259 -0.426 1.012
[25] 0.008 0.655 -2.599 -0.649 1.062 -2.753 0.668 -0.093 0.175 -0.207 1.632 -0.871

13
4.2 Datos de rango continuo 4 TABLAS Y GRÁFICAS

12
Histograma 1 Histograma 2

12
Frequency

Frequency
0 2 4 6 8

0 2 4 6 8
−3 −2 −1 0 1 2 −3 −2 −1 0 1 2

datos datos

Histograma 3 Histograma 4

10 15 20
Frequency

Frequency
8
6
4

5
2
0

0
−2 −1 0 1 −3 −2 −1 0 1 2

datos datos

Figura 3: Histogramas con distintos maneras de asignar el parámetro breaks

Histograma 1 Histograma 5
12

0.4
Frequency

Density
8

0.2
4

0.0
0

−3 −2 −1 0 1 2 −3 −2 −1 0 1 2

datos datos

Figura 4: Histogramas con distintos maneras de asignar el parámetro probability

[37] 0.972 1.465 -1.742 0.420 1.140 0.436 -0.015 0.998 -0.931 0.588 -1.296 0.369
[49] 0.233 0.140
R input-output
breaks
Se harán varios histogramas de estos datos para ilustrar el uso del parámetro
R input-output
> par(mfrow=c(2,2)) # Imprime gráficas, 2 renglones, 2 columnas
> hist(datos, main="Histograma 1") # Utilizando los parámetros predeterminados
> hist(datos, breaks=15, main="Histograma 2") # Sugerir 15 breaks (puede no tomarla sug)
> hist(datos,breaks=seq(-2.8,1.7,length=15), main="Histograma 3") # Usa estos breaks
> hist(datos,breaks="Scott", main="Histograma 4")# Utilizar el algoritmo "Scott"
R input-output
Al observar los histogramas resultantes en la gura 3, se puede notar, por ejemplo que el "Histograma 2" hay

menos de 15 breaks a pesar de la sugerencia que se le dió. En el "Histograma 3" se le dió la posición de estos

breaks para obtener exactamente lo que se buscaba. En el "Histograma 4" se da el nombre de uno de los métodos

disponibles en R para calcular el número de breaks, el método predeterminado es "Sturges".

Puede notarse que los histogramas anteriores se gracaron de tal modo que muestran la frecuencia absoluta de los

intervalos dados, para modicar esto, se utiliza el parámetro probability= que tiene como valor predeterminado
FALSE. Para hacer un histograma de frecuencias relativas se le dará el valor TRUE a este último parámetro, por
ejemplo,
R input-output
> #### Histograma de frecuencias relativas
> par(mfrow=c(1,2)) # Imprime gráficas, 1 renglón, 2 columnas
> hist(datos,main="Histograma 1")
> hist(datos,probability=TRUE,main="Histograma 5")
R input-output
En la gura 4 se muestra el resultado de estos comandos.

14

You might also like