Você está na página 1de 14

Tutorial - Introducción al R

Bíoestadística/Estadística
Semestre par 2016

R es un es un entorno y lenguaje de programación libre especialmente adaptado al cálculo estadístico.


Además permite hacer gráficos fácilmente. R es gratis y compila y funciona en una gran variedad de
plataformas de UNIX, Windows y MacOS. Se puede bajar el código fuente completo, la distribución
binaria compilada, las extensiones y documentación de R de “Comprehensive R Archive Network” (CRAN):
http://www.cran.r-project.org.
Se recomienda utilizar RStudio https://www.rstudio.com/ en cualquiera de los sistemas operativos, aunque
se puede usar R desde una terminal. Se abre una terminar y al escribir el comando R en la misma se abre la
consola de R.
Para utilizar un comando cualquiera en R, se debe tipear el nombre del comando seguido por sus argumentos
entre paréntesis. Esto se debe a que R utiliza funciones para obtener resultados. Por ejemplo, para salir de R
se puede tipear el comando:

q()

en la consola.
Es recomendable escribir la secuencia de funciones en un archivo de texto, que llamaremos script y luego
correrlo en la consola, ya que el script es fácil de guardar y volver a reproducirlo en otra instancia.
Para obtener información sobre una función específica, el comando es

help()

El nombre de la función se pasa como argumento de la función help. R es sensible a mayúsculas y minúsculas,
por lo tanto A y a son símbolos diferentes y por lo tanto refieren a variables distintas. Si no se recuerda el
nombre exacto de una función, se puede buscar en los archivos de ayuda de R escribiendo

help.search()

el término buscado (en inglés) debe estar dentro del paréntesis y con comillas. Al utilizar help.search aparecen
todos los comandos que contengan dicha palabra, con la sintaxis paquete:comando. Varios paquetes ya vienen
instalados con el R básico. Aquellos que no lo están se pueden instalar y luego cargarlos con el comando
library(paquete).
Ejercicio 1. Mirar la ayuda de la función mean(). Determinar si existe una función que calcule el máximo
de un grupo de números.
El símbolo # significa que todo lo que le sigue es solo comentario.

Manipulaciones simples: números y vectores

R opera en datos con estructuras predeterminadas. La estructura más simple es el vector numérico. Para
asignar un valor a una variable se puede usar una flecha “<-” o el igual “=”.

1
a<-5
b = 4

Para determinar un vector se deben concatenar varios números, utilizando la función c().

x<- c(3.5, 4, 0.6, 8, 12)


z<- c(3.5, b, 0.6, 8, 12)

Para ver el contenido de una variable en la consola podemos ver su contenido. Escribiendo x y z verificamos
que son el mismo vector.

## [1] 3.5 4.0 0.6 8.0 12.0

## [1] 3.5 4.0 0.6 8.0 12.0

También se pueden crear vectores concatenando vectores ya existentes. R contiene todos los operadores
aritméticos estándar (ver tabla). Estas operaciones se pueden usar también con vectores. Además de las
expresiones artiméticas comunes también se pueden usar: log(), sin(), cos(), exp(), tan().

u<- 4*x + z

Ejercicio 2

• Crear un vector y que contenga al vector x, al número 3 y al vector z multiplicado por 2.


• Cuál es el resultado de x+y (dos vectores de diferente largo). Y de y+x?

Ejercicio 3
Explorar qué hacen las funciones range(), mean(), length(), sum() aplicadas a un vector.
Ejercicio 4 Explorar qué hace la función sort(). Es posible ordenar los elementos de manera decreciente?
Los vectores se pueden crear “a mano”, escribiendo todos los elementos

diez <-c(1,2,3,4,5,6,7,8,9,10)

o usando las facilidades de R. Para crear vectores que contienen secuencias de números se puede usar “a:b”
que crea una secuencia que empieza en a y va sumando 1 hasta llegar a b, o la función seq(a,b,c), que hace lo
mismo, pero suma c en vez de uno (c puede ser cualquier real positivo). La función “:” tiene alta prioridad
ante otras operaciones.

v1 = -5:5 #avanzo de a 1
v2 = seq(-5,5,0.5) #avanzo de a 0.5

v1

## [1] -5 -4 -3 -2 -1 0 1 2 3 4 5

2
v2

## [1] -5.0 -4.5 -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5
## [15] 2.0 2.5 3.0 3.5 4.0 4.5 5.0

Ejercicio 5

• Comparar los resultados de la expresión 1:n-1 y 1:(n-1) para algún número natural n.
• Generar una secuencia de números del 20 al 1.
• Generar otra secuencia del 20 al 2, sólo de números pares.

Para elegir subconjuntos de un vector alcanza con poner el nombre del vector y el índice o índices de los
elementos que se quieren elegir con paréntesis rectos []. Los índices deben de variar entre 1 y n=length(vector)
largo del vector. Por ejemplo, para obtener la primera componente de y

y[1]

Ejercicio 6 Usar la función “:” para elegir los elementos del 2 al 5 del vector y.

Operadores

Aritméticos Comparación Lógicos


+ adición < menor ! x NO lógico
- substracción > mayor x & y Y lógico
multiplicación <= menor o igual x | y O inclusivo
multiplicación <= menor o igual xor(x,y) O exclusivo
/ división >= mayor o igual
ˆ exponente == igual
%% módulo (resto) != distinto
%/% división entera

Los vectores lógicos pueden ser utilizados con operadores aritméticos. En ese caso el FALSE se convierte en 0
y el TRUE se convierte en 1.

y[y > 2]

## [1] 3.5 4.0 8.0 12.0 3.0 7.0 8.0 16.0 24.0

muestra los valores de y que son mayores que dos.

y>2

## [1] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE

devuelve un vector de TRUE y FALSE según si cada valor de y es mayor que 2 o no.
Ejercicio 7 Crear un vector m que contenga los elementos de y mayores que 2 y menores que 5. Explorar la
diferencia entre las multiplicaciones

3
m*m
m%*%m

Matrices

Son la extensión natural de los vectores. Una matriz se puede definir del siguiente modo:

x <- matrix(1:20, nrow = 4, byrow = TRUE)

Esto genera una matriz de 4 filas con los números del 1 al 20, la cantidad de columnas se determina
automáticamente si es posible. En R las matrices por defecto se llenan por columnas, es decir, la primer
columna de la matriz x serían los números del 1 al 4, la segunda son los números del 5 al 8 y así sucesivamente.
En el ejemplo, para que se llenase por filas hubo que especificárselo utilizando el argumento “byrow = TRUE”.
Observación importante En el ejemplo anterior, x[3,2] nos daría el segundo elemento de la tercera fila de
x, x[,1] sería la primer columna y x[3,] la tercer fila.
Ejercicio 8 Crear un vector de largo 20 con los números que usted quiera. A partir del vector creado, crear
una matriz m1 de dimensiones 5 x 4 completándola por filas. A partir del mismo vector, crear otra matriz
m2 de dimensiones 2 por 10, completándola por columnas.

Operaciones básicas con matrices

Dada una matriz A, la función t(A) calcula la traspuesta de la matriz A. Dada una matriz A, nrow(A) y
ncol(A) nos dicen el número de filas y columnas de la matriz A y dim(A)=c(nrow(A), ncol(A)). La función
solve() aplicada a una matriz calcula su inversa si esta existe. Dadas dos matrices A y B, el producto matricial
entre ambas se hace mediante el operador

A %*%B

Si A y B tienen la misma dimensión, A*B devuelve el producto componente a componente, no el producto


matricial.
Ejercicio 9 Crear una matriz cuadrada m3 de dimensión 5. Ver qué operaciones de las vistas anteriormente
se pueden aplicar a m1, m2 y m3. Observar en los casos que no se pueden hacer las operaciones, los mensajes
de error que da el programa.

“Pegando” matrices

Es importante recordar que la función c(), se puede utilizar para concatenar cualquier tipo de objetos, no sólo
variables numéricas, enteras, etc. De la misma familia son las funciones cbind y rbind que permiten combinar
una serie de objetos bien por columnas o por filas. Habitualmente se usan para construir una matrices a
partir de vectores.

La función apply

La función apply() es muy importante a la hora de programar códigos eficientes para el manejo de grandes
conjuntos de datos. Permiten ahorrarse el uso de muchos bucles (que veremos más adelante), lo cual lleva a
un código más legible y, en muchos casos, más eficiente. La función apply permite realizar la misma operación
en todas las filas o columnas de un array (matriz) simultáneamente. Sólo hay que indicarle la operación a
realizar y el índice o índices sobre los cuales ha de realizarla. Por ejemplo, para sumar los elementos de las
filas de la matriz x definida antes

4
apply(x,1,sum)

## [1] 15 40 65 90

Para sumar las columnas de x usamos:

apply(x,2,sum)

## [1] 34 38 42 46 50

también se puede definir una nueva función mediante function() y aplicarle la nueva función a las filas o
columnas

apply(x,1,function(z) z-mean(z)) #sino podemos hacer

## [,1] [,2] [,3] [,4]


## [1,] -2 -2 -2 -2
## [2,] -1 -1 -1 -1
## [3,] 0 0 0 0
## [4,] 1 1 1 1
## [5,] 2 2 2 2

mioperacion=function(z){
return(z-mean(z))} #defino la función primero
apply(x,1,mioperacion)

## [,1] [,2] [,3] [,4]


## [1,] -2 -2 -2 -2
## [2,] -1 -1 -1 -1
## [3,] 0 0 0 0
## [4,] 1 1 1 1
## [5,] 2 2 2 2

Ejercicio 10

• Crear un vector llamado v2 que contenga los promedios de las columnas de la matriz mat2.
• Crear una matriz mat3, que a las entradas de cada fila le agregue la suma de sus filas. Hacerlo usando
primero una combinación de operaciones matriciales y apply. Luego hacerlo utilizando directamente la
función apply. Explorar si los resultados son iguales.

Data frames
Los data.frames (campos de datos) son el objeto más habitual para almacenar datos. La forma de pensar en un
data.frame es considerar que cada fila representa a un individuo de una muestra y el correspondiente valor para
cada columna representa la medición de alguna variable para ese individuo (fila-individuo, columna-variable).
Si, por ejemplo, tenemos 100 alumnos y las notas numéricas de ellos en cada examen junto con la calificación
final (tipo caracter), esto podrá representarse con un data.frame de 100 filas con una columna por cada
examen y una columna más para la calificación final.
R trae algunos juegos de datos ya pre-cargados, uno de ellos se llama mtcars. Para acceder a él basta llamarlo
por su nombre:

5
mtcars

Y vermos todo el contenido de mtcars.


Usar las funciones View(), head() y help() para ver qué contiene esta base de datos.
Tanto en matrices como en data.frames podemos localizar sus objetos ya sea por la posición que ocupan, o
usando el nombre de su fila y su columna. Por ejemplo:

mtcars[3,2]

## [1] 4

mtcars['Datsun 710','cyl']

## [1] 4

De la misma manera, para seleccionar columnas de un data.frame, podemos hacer lo mismo que antes, pero
usando el comando $.

mtcars[,4]

## [1] 110 110 93 110 175 105 245 62 95 123 123 180 180 180 205 215 230
## [18] 66 52 65 97 150 150 245 175 66 91 113 264 175 335 109

mtcars$hp

## [1] 110 110 93 110 175 105 245 62 95 123 123 180 180 180 205 215 230
## [18] 66 52 65 97 150 150 245 175 66 91 113 264 175 335 109

Se puede usar la función all.equal() parar verificar que ambas expresiones son equivalentes:
all.equal(mtcars$hp,mtcars[,4]) ### TRUE
Ejercicio 11

• Usar la función dim para saber cuántos autos tiene esta base de datos y cuántas características para
cada auto.
• Crear un vector que contenga el peso del auto. Transformar dicho vector para cambiar el peso de libras
a kg. Agregarlo al data.frame usando $.

Para matrices y dataframes, colnames() y rownames() son las etiquetas de las columnas y las filas respectiva-
mente. Se puede acceder también con dimnames() que devuelve una lista con ambos vectores. Puede ser útil
ver un dataframe como una matriz con columnas que pueden tener diferentes modos y atributos. Sus filas o
columnas pueden ser extraídas usando los índices habituales en matrices.

6
Tipos de objeto

Dado un objeto se puede consultar su tipo, su clase (numérico, caracter, lista, matriz. . . ). Dado un objeto
de un cierto tipo, es posible forzarlo a otro distinto (siempre que esto tenga sentido para el objeto). Esto es
posible mediante la familia de funciones as.objeto().
En particular, no es lo mismo, por ejemplo, tener el número 3 que el caracter ‘3’, o tener una variable llamada
datos que la palabra ‘datos’. Por ejemplo, si Data un data.frame, la función as.matrix(Data) lo convierte
en una matriz si esto es posible. Un uso indebido de estas imposiciones de tipo puede llevar a resultados
no deseados (el que no haya habido mensaje de error no quiere decir que la conversión se haya hecho como
nosotros queríamos).
Para verificar, disponemos de funciones que permiten determinar si una variable es un número, un string, un
vector, etc y, en caso de necesitarlo, convertir unas en otras.
as.numeric recibe una entrada y la convierte a número (si es posible). is.numeric verifica si el argumento
recibido es un número o no.

is.numeric(3) #el número 3, es numérico

## [1] TRUE

is.numeric('3') #el caracter '3', no es numérico.

## [1] FALSE

as.numeric('3') #convertimos el caracter '3' a número.

## [1] 3

as.numeric(3) #convertimos el número 3 a número, o sea, no hacemos nada.

## [1] 3

Hay que tener cuidado al usar este tipo de funciones ya que a veces uno deconoce a qué clase de objeto se le
está aplicando. Veamos que ocurre si intentamos aplicar as.numeric a, por ejemplo, una palabra:

as.numeric(c('plato','3'))

## Warning: NAs introducidos por coerción

## [1] NA 3

is('3')

## [1] "character" "vector" "data.frameRowLabels"


## [4] "SuperClassMethod"

7
Como la palaba ‘plato’ no se puede convertir automáticamente en un número, la función as.numeric() devuelve
NA, que quiere decir, dato faltante y un warning, que avisa que introdujo un NA. El caracter ‘3’ si lo logra
convertir en un número.
Algunas funciones similares son is.vector, as.vector, is.character, as.character, is.logical, as.logical. La función
is se usa para saber qué tipo de objeto es.
Ejercicio 12 a) Evaluar las funciones recién mencionadas en los siguientes valores y observar los resultados
obtenidos:

• 43
• ‘45’
• FALSE
• ‘FALSE’
• 3.14

b) Observar y explicar que ocurre al realizar las siguientes operaciones

• ‘3’ + ‘4’
• TRUE + TRUE
• TRUE + 5
• 4 × FALSE

Para realizar operaciones numéricas con data.frames, lo más conveniente es convertir a matriz, array o vector
la parte con la que se desea operar y después hacer las operaciones.

Leyendo datos desde archivos.


Muchas veces los datos estarán dados en un archivo. R tiene varias funciones que permiten importar datos
desde otras aplicaciones.

• read.table() lee cualquier conjunto de datos tabulados donde las columnas están separadas por tab, por
ejemplo en un archivo .txt (se puede especificar el separador)
• read.csv() es una versión simplificada de read.table(), donde los argumentos están ya preconfigurados
para leer archivos .csv (eg. planillas Excel). En este caso el separador por defecto es espacio, también
se puede cambiar.

En caso de querer usar estas funciones para cargar los datos hay que tomar precauciones con, por ejemplo, el
directorio sobre el que se está trabajando. Sin embargo en RStudio estas cosas se pueden hacer a través de
menús: En caso de querer cambiar el directorio de trabajo (es decir, el punto de partida para las rutas de
archivo y aquel en el que se guardan por defecto las salidas que genere nuestro script), en R Studio basta
con ir al menú Session -> Set Working Diretory. Para cargar un archivo .csv o .txt como data.frame, basta
con utilizar el menú Import Dataset -> From Local File. . . ubicado en el cuadrante superior derecho del
programa.
Ejercicio 13

• Descargar de la plataforma EVA el archivo DatosCensos.csv (prestar especial atención al directorio


donde se guarda) y luego cargalo en R, asignándole un nombre al juego de datos. Tener en cuenta que
los datos están separados por ‘,’.
• Elegir una columna y escribir un código que sume la población de cada departamento. Verificar si
coincide con el total dado en la tabla.

8
Procedimientos gráficos

El lenguaje R dispone de varias funciones preparadas para la representación gráfica de datos y estas serán
muy importantes a lo largo del curso:
Estas funciones se dividen en dos grandes grupos:

1. Gráficos de alto nivel: crean un nuevo gráfico en la ventana de gráficos.


2. Gráficos de bajo nivel: permiten añadir líneas, puntos, etiquetas, etc. a un gráfico ya existente.

Gráficos de alto nivel

De entre todos los gráficos de este tipo se destaca la función plot(), que tiene muchas variantes y dependiendo
del tipo de datos que se le pasen como argumento actuará de modos distintos. Lo más común es plot(x,y)
para representar un diagrama de puntos de y respecto a x. Otras funciones de alto nivel importantes son, por
ejemplo, hist() para dibujar histogramas o barplot para dibujar gráficos de barras. Para representaciones
tridimensionales (superficies) se usa persp.
Algunos parámetros comunes a la mayoría de los gráficos de alto nivel:

• add=TRUE Fuerza a la función a actuar como si fuese de bajo nivel (intenta super- ponerse a un gráfico
ya existente). Hay que tener cuidado, no sirve para todas las funciones.
• type Indica el tipo de gráfico a realizar, cabe destacar type=“p” sirve para representar puntos (opción
por defecto), type=“l” para representar líneas, type=“b” para representar los puntos unidos por líneas.

Gráficos de bajo nivel

Son de gran utilidad para completar un gráfico, compararlo con otro superponiendo ambos, etc. Destacan los
siguientes (help(par) para una descripción completa de estos y otros parámetros):

• lines: Permite superponer nuevas funciones en una gráfica ya existente.

• points: Permite añadir puntos.


• legend: Para añadir una nueva leyenda.
• text: Añade texto.
• pch: Indica la forma en que se dibujarán los puntos.

• lty: Indica la forma en que se dibujaran las líneas. (Line TYpe)


• lwd: Ancho de las líneas. (Line WiDth)
• col: Color usado para el gráfico (ya sea para puntos, líneas. . . )

• font: Fuente a usar en el texto.

Muchos de éstos parámetros se pueden ingresar como un único valor, o como un vector de valores. En este
caso el gráfico irá alternando dicho parámetro en cada punto/línea de la gráfica.
El siguiente ejemplo grafica la función logaritmo para los enteros de 1 a 10. Luego, graficamos sobre la misma,
la función raiz cuadrada en la misma región usando lines.

9
x = 1:10
y = log(x) #evalúa la función logaritmo en cada entrada del vector x
z = sqrt(x) #idem, con la función raiz
plot(x,y, type = 'l', main = 'Gráficos de las funciones logaritmo y raiz ',
col = 'GREEN', ylim = c(0,4) )
lines(x,z, col = 'ORANGE')

Gráficos de las funciones logaritmo y raiz


4
3
2
y

1
0

2 4 6 8 10

x
La función barplot recibe un vector y grafica en barras sus valores, en el orden que los recibe. Como se verá
en el ejemplo, resulta adecuada para graficar información por categorías

datos_porc = c(43, 62) #por ejemplo, podemos suponer que


#son porcentajes tomados en categorías hombre/mujer
barplot(datos_porc, main = "Gráfico de algún porcentaje relevado",
names.arg = c('Porcentaje de hombres', 'Porcentaje de mujeres'),
cex.names=0.8, col = c('lightpink1', 'lightblue1'), ylim=c(0,70))

10
70
50
30
10
0 Gráfico de algún porcentaje relevado

Porcentaje de hombres Porcentaje de mujeres

Nota: si escribimos en la consola colours() obtenemos los nombres preestablecidos de colores en R.


Histogramas y boxplot Otras representaciones gráficas posibles son los histogramas y los gráficos de cajas
(boxplot). Para realizar un histograma basta tomar un vector con los datos a analizar y aplicar la función
hist. Por ejemplo si quiero hacer un histograma con las entradas de la columna wt de la base de datos mtcars:

vector = mtcars$wt #el vector a analizar, recordar que mtcars viene preestablecida en R
hist(vector)

Histogram of vector
8
6
Frequency

4
2
0

2 3 4 5

vector
En ese caso R determinará la cantidad y rango de intervalos que usará para construir el histograma. Sin
embargo esto se puede elegir manualmente utilizando el argumento opcional breaks. Asimismo, existen
argumentos opcionales que permiten modificar título, nombre de las variables, color, etc.

11
hist(vector, breaks = 15, main = "Histograma similar pero más bonito", xlab = "Peso(lb)", col = "green")

8
6
Histograma similar pero más bonito
Frequency

4
2
0

2 3 4 5

Peso(lb)
Si queremos realizar un diagrama de cajas basta utilizar el comando boxplot

boxplot(vector)
5
4
3
2

Ejercicio 14

• Explorar la ayuda de barplot y plot. e hist


• Crear gráficos de barras con las poblaciones por departamento a partir de los datos de DatosCensos.csv.
• Elegir un departamento de Uruguay y a partir de DatosCensos.csv realizar un gráfico que muestre la
evolución de su población a lo largo del tiempo.

12
Una vez que en la ventana de gráficos tenemos algo representado, existen dos funciones que nos permiten
trabajar interactivamente sobre dicha ventana:

• La función locator() sitúa el cursor en la ventana de gráficos y cada vez que pulsemos el botón izquierdo
del mouse nos devolverá las coordenadas del punto en el que hayamos marcado.
• La función identify() nos permite marcar uno de los puntos del gráfico (con el ratón, igual que antes),
y nos devuelve la componente de los vectores representados que dio lugar a ese punto. Muy útil en
estadística para identificar outliers.

Condiciones y bucles.
R tiene disponible una construcción condicional de la forma:

if (expr 1) {expr 2} else {expr 3}

donde expr 1 evalúa una condición y debe devolver un valor: TRUE o FALSE. Si el resultado es TRUE,
entonces devolverá el resultado de expr 2 y si es FALSE el de expr 3. No es obligatorio incluir el else.
El siguiente ejemplo utiliza if para decir si la variable entero es par o impar.

entero = 2 #tenemos una variable entera, en este caso vale 2


if (entero%%2 == 0) {print('el numero es par')} else {print ('el numero es impar')}

## [1] "el numero es par"

Para construir un loop se puede usar el comando “for” que tiene la siguiente forma:

for (name in expr 1) {expr 2}

donde “name” es la variable que varía en el loop, típicamente usamos una letra. expr 1 es un vector
(generalmente es una secuencia, como por ejemplo 1:10), y expr 2 es generalmente un grupo de expresiones,
donde alguna de ellas depende de la variable sobre la que estamos iterando.
Supongamos que tenemos el vector numérico y:

y<-c(3,2,0,6,1,0)

y que para cada elemnto de y queremos ver si es igual a 0 o no. Si lo es, remplazaremos el elemento con el
número 10.

for(i in 1:length(y)){
if(y[i]==0){ y[i]<-10}
}

Ejercicio 15 Dado el vector: v<-c(4,5,9,2,1,4), remplazar los elementos impares con el número 1.

Simulación de eventos aleatorios


Además de analizar datos, R permite simular datos aleatorios. Una forma de hacerlo es utilizando la función
sample, que dado un conjunto (vector) y un número N sortea con o sin reposición una N-upla de elementos
del conjunto. Por ejemplo, si queremos simular 10 tiradas de moneda donde los resultados posibles son cara y
número (“C” y “N” ) y guardarlas en una variable dados para su posterior procesamiento escribimos:

13
dados = sample(c("C", "N" ), 10, rep = TRUE)
dados

## [1] "N" "N" "C" "C" "C" "N" "C" "N" "C" "C"

Es necesario incluir el argumento rep = TRUE para que se admitan resultados reptidos. El argumento por
defecto es FALSE de modo que si no se indica nada el sorteo se hará sin repetición. Por ejemplo, si queremos
sortear 5 números diferentes entre 1 y 30 podemos usar

sample(1:30, 5) #Da igual si se indica rep = FALSE o no

## [1] 4 14 13 18 11

Sin embargo sample no es la única forma de simular eventos aleatorios. Existen funciones que permiten
simular números aleatorios cuyas probabilidades tienen ciertos comportamientos predefinidos (algunas de
las distintas distribuciones que se verán en el curso). Por regla general el nombre de las funciones comienza
con ‘r’ y sigue con una abreviatura de la distribución considerada. Así, por ejemplo la función runif genera
valores distribuidos uniformemente en un intervalo dado:

runif(1, 3,5) #sortea un número real entre 3 y 5.

## [1] 3.488726

runif(2,3,5) #ahora dos valores. El primer argumento es la cantidad de valores a sortear

## [1] 3.194658 4.427667

runif(5) #si no indico nada, el intervalo considerado por defecto es [0,1]

## [1] 0.08544554 0.34183580 0.81622809 0.63853032 0.68985690

Ejercicio 16

• Algunas otras funciones a tener en cuenta son rbinom, rgeom, rnbinom, rmultinom, rnorm, rexp.
Explorar la ayuda para determinar qué hace cada una de ellas, y generar para cada una un juego de 50
datos (con parámetros a elección)

• Investigar si es posible utilizar la función sample para simular un sorteo de valores no equiprobables.
En caso de ser posible, simular 50 tiradas de una moneda cargada con probabilidades 0.6 y 0.4 para “C”
y “N” respectivamente.

14

Você também pode gostar