Sei sulla pagina 1di 46

Introducción a R

Introducción a R
Codificación

José Luis Salmerón

19 de octubre de 2017
Introducción a R
Outline

1 Funciones
De scripts a funciones
Argumentos
Scope

2 Bucles y control de flujo


Condicionales
Loops
Loops implícitos

3 Debugging

4 Operaciones de agrupación, unión y modificación de la estructura de los datos


Agrupaciones de datos
Introducción a R
Funciones

Outline

1 Funciones
De scripts a funciones
Argumentos
Scope

2 Bucles y control de flujo


Condicionales
Loops
Loops implícitos

3 Debugging

4 Operaciones de agrupación, unión y modificación de la estructura de los datos


Agrupaciones de datos
Introducción a R
Funciones
De scripts a funciones

Outline

1 Funciones
De scripts a funciones
Argumentos
Scope

2 Bucles y control de flujo


Condicionales
Loops
Loops implícitos

3 Debugging

4 Operaciones de agrupación, unión y modificación de la estructura de los datos


Agrupaciones de datos
Introducción a R
Funciones
De scripts a funciones

Intro a funciones

Motivación y concepto

Se usa un lenguaje de programación para automatizar el trabajo.


Se puede hacer mucho con las funciones built-in de R en
combinación con scripts, aunque los scripts no son muy flexibles
cuando las entradas son variables.
Una función es un trozo de código que se ejecuta de forma
consecutiva y sin interrupción, con dos ventajas sobre los scripts:
1 Las funciones pueden tener como entradas unas variables, por
lo que se puede usar con datos diferentes.
2 Las funciones devuelven la salida como un objeto, para que
pueda trabajar con el resultado de esa función.

Ejemplo
Se desea presentar números reales (por ejemplo, 1 ) como porcentajes,
2
redondeados a un único decimal. Para ello:
1 Multiplique los números fraccionarios por 100.
2 Redondee el resultado a un decimal. Puede usar la función round().
3 Pegue (paste()) un signo de porcentaje después del número redondeado.
4 Imprima el resultado.
5 Ejecute el script con source()
Introducción a R
Funciones
De scripts a funciones

Mi primera función

Componentes de una función


Una función tiene los siguientes elementos:
La palabra clave function siempre debe ir seguida de paréntesis. Le
dice a R que lo que viene después es una función.
Los paréntesis después de la función son la entrada o lista de
argumentos. No se puede especificar en la lista de argumentos el
tipo de éstos, solo se puede controlar en el cuerpo de la función.
Las llaves, {} delimitan el contenido de la función.
La declaración return() es la salida de la función. El objeto que se
manda a dicha declaración se devuelve desde el interior de la
función al espacio de trabajo. Solo se puede poner solo un objeto
entre los paréntesis.
Se usa el operador de asignación <- para poner esta función
completa en un objeto denominado con el nombre de la función.

Ejemplo

1 Convierta el script anterior en una función llamada addPercent()


2 Revise el área de trabajo con la función ls()
3 Ejecute la función con el vector numérico anterior
4 Ejecute la función con el vector c("No", "son", "números")
Introducción a R
Funciones
De scripts a funciones

Una función como objeto

Asignando una función

Ya que una función es solo otro objeto, puede manipularlo igual


que otros objetos. Puede asignar la función a un nuevo objeto y
copiarlo otroObjeto <- nombreFuncion.
Ahora otroObjeto es una función que hace lo mismo que
nombreFuncion.
No se agregan los paréntesis al asignar la función. Si agrega los
paréntesis, debe llamar a la función y poner el resultado en
otroObjeto. Si no agrega los paréntesis, se refiere al objeto de
función en sí mismo sin llamarlo.

Ejemplo

1 Asigne la función addPercent a ppaste.


2 Ejecute la función ppaste sin argumentos.
3 Ejecute la función ppaste con argumentos.
Introducción a R
Funciones
De scripts a funciones

Reduciendo líneas

Devolviendo elementos por defecto

No todos los elementos mencionados son obligatorios.


La declaración return() es opcional, ya que, por defecto,
R siempre devuelve el valor de la última línea de código.
return() es útil si desea salir de la función antes del final del
código en el cuerpo.
Incluso se puede prescindir de las llaves {} cuando la función
conste de una única línea de código.

Ejemplo

1 Reescriba la función addPercent y llámela addPercent2 eliminando


los elementos opcionales.
2 Reescriba la función addPercent2 y llámela addPercent3 agregando
una línea que compruebe si x es numérico y, si no, devuelve NULL.
Se usa if sólo para ilustrar la utilidad de return()

Ejercicio extra

1 Reescriba la función addPercent, llámela addPercent4 eliminando {}.


Introducción a R
Funciones
De scripts a funciones

Reduciendo líneas

Devolviendo elementos por defecto

No todos los elementos mencionados son obligatorios.


La declaración return() es opcional, ya que, por defecto,
R siempre devuelve el valor de la última línea de código.
return() es útil si desea salir de la función antes del final del
código en el cuerpo.
Incluso se puede prescindir de las llaves {} cuando la función
conste de una única línea de código.

Ejemplo

1 Reescriba la función addPercent y llámela addPercent2 eliminando


los elementos opcionales.
2 Reescriba la función addPercent2 y llámela addPercent3 agregando
una línea que compruebe si x es numérico y, si no, devuelve NULL.
Se usa if sólo para ilustrar la utilidad de return()

Ejercicio extra

1 Reescriba la función addPercent, llámela addPercent4 eliminando {}.


Introducción a R
Funciones
Argumentos

Outline

1 Funciones
De scripts a funciones
Argumentos
Scope

2 Bucles y control de flujo


Condicionales
Loops
Loops implícitos

3 Debugging

4 Operaciones de agrupación, unión y modificación de la estructura de los datos


Agrupaciones de datos
Introducción a R
Funciones
Argumentos

Tipos de argumentos

Tipos y usos

Los argumentos siempre se nombran cuando se define la función.


Pero cuando llama a la función, no hay que especificar el nombre si
se dan en el orden en que aparecen.
Los argumentos pueden ser opcionales, entonces no hay que
especificar un valor para ellos.
Los argumentos pueden tener un valor predeterminado, que se
utiliza si no especificó un valor. Se indican asignándoles un valor
con = <valor> cuando se define la función.

Ejemplo

1 Reescriba addPercent2 como addPercent5 para que acepte tanto


números como porcentajes.
2 Agregue un argumento mult que transforme la entrada si no son
porcentajes. La función debe asumir por defecto que la entrada son
números.
3 Ejecute addPercent5(x, mult=1), addPercent5(x, 1) y
addPercent5(x)
4 Convierta mult en opcional y ejecútelo con porcentajes x2 <-
c(80.3, 359.736, 76.522).
Introducción a R
Funciones
Argumentos

Tipos de argumentos (Solución)

Tipos y usos

Los argumentos siempre se nombran cuando se define la función.


Pero cuando llama a la función, no hay que especificar el nombre si
se dan en el orden en que aparecen.
Los argumentos pueden ser opcionales, entonces no hay que
especificar un valor para ellos.
Los argumentos pueden tener un valor predeterminado, que se
utiliza si no especificó un valor. Se indican asignándoles un valor
con = <valor> cuando se define la función.

Ejemplo

1 Reescriba addPercent2 como addPercent5 para que acepte tanto


números como porcentajes.
2 Agregue un argumento mult que transforme la entrada si no son
porcentajes. La función debe asumir por defecto que la entrada son
números.
3 Ejecute addPercent5(x, mult=1), addPercent5(x, 1) y
addPercent5(x)
4 Convierta mult en opcional y ejecútelo con porcentajes x2 <-
c(80.3, 359.736, 76.522).
Introducción a R
Funciones
Argumentos

Argumentos extra

Dots

Si una función tiene muchos argumentos se puede tener una larga


lista de argumentos.
La solución genial a esto son los argumentos extra, que se definen
con ....
Normalmente, los argumentos extras se agregan al final de la lista
de argumentos de su propia función y al final de los argumentos
para la función a la que desea pasar argumentos.
Si no especifica un argumento en lugar de ..., la función a la que
se pasan los argumentos usa sus valores por defecto.

Ejemplo

1 Reescriba addPercent5() como addPercent6() para incluir la


definición de los dígitos a redondear.
2 Ejecute addPercent6() pasándole x2 <- c(80.3, 359.736, 76.522),
con el argumento opcional = 1 y sin el argumento extra.
3 Ejecute addPercent6() pasándole x2 <- c(80.3, 359.736, 76.522),
con el argumento opcional = 1 y con el argumento extra = 1.
4 Ejecute addPercent6() pasándole x2 <- c(80.3, 359.736, 76.522),
con el argumento opcional = 1 y con el argumento extra = 2.
Introducción a R
Funciones
Argumentos

Argumentos extra (Solución)

Dots

Si una función tiene muchos argumentos se puede tener una larga


lista de argumentos.
La solución genial a esto son los argumentos extra, que se definen
con ....
Normalmente, los argumentos extras se agregan al final de la lista
de argumentos de su propia función y al final de los argumentos
para la función a la que desea pasar argumentos.
Si no especifica un argumento en lugar de ..., la función a la que
se pasan los argumentos usa sus valores por defecto.

Ejemplo

1 Reescriba addPercent5() como addPercent6() para incluir la


definición de los dígitos a redondear.
2 Ejecute addPercent6() pasándole x2 <- c(80.3, 359.736, 76.522),
con el argumento opcional = 1 y sin el argumento extra.
3 Ejecute addPercent6() pasándole x2 <- c(80.3, 359.736, 76.522),
con el argumento opcional = 1 y con el argumento extra = 1.
4 Ejecute addPercent6() pasándole x2 <- c(80.3, 359.736, 76.522),
con el argumento opcional = 1 y con el argumento extra = 2.
Introducción a R
Funciones
Argumentos

Usando funciones como argumentos

FUN

Se puede asignar el código de función a un argumento.


Para ello se crea un argumento llamado FUN al que se le pasará el
nombre de la función que se pasa como argumento.
R asigna el código de función a FUN, por lo que ahora FUN() es
una copia de la función pasada como argumento y funciona
exactamente igual.
No hay paréntesis en la asignación de argumentos. Si se agregan
paréntesis, se asignaría el resultado de una llamada a dicha función
en lugar de la función misma.

Ejemplo

1 La función addPercent() usa round(), pero es posible usar otras


opciones, ej.:, signif() que no redondea a un número de
decimales; sino a un número de dígitos.
2 Reescriba addPercent6() como addPercent7() de tal forma que
permita pasarle una función de redondeo (ej.: round() o signif())
como argumento.
3 Ejecute addPercent7() con la función round() y signif().
Introducción a R
Funciones
Argumentos

Usando funciones como argumentos (Solución)

FUN

Se puede asignar el código de función a un argumento.


Para ello se crea un argumento llamado FUN al que se le pasará el
nombre de la función que se pasa como argumento.
R asigna el código de función a FUN, por lo que ahora FUN() es una
copia de la función pasada como argumento y funciona
exactamente igual.
No hay paréntesis en la asignación de argumentos. Si se agregan
paréntesis, se asignaría el resultado de una llamada a dicha función
en lugar de la función misma.

Ejemplo

1 La función addPercent() usa round(), pero es posible usar otras


opciones, ej.:, signif() que no redondea a un número de
decimales; sino a un número de dígitos.
2 Reescriba addPercent6() como addPercent7() de tal forma que
permita pasarle una función de redondeo (ej.: round() o signif())
como argumento.
3 Ejecute addPercent7() con la función round() y signif().
Introducción a R
Funciones
Scope

Outline

1 Funciones
De scripts a funciones
Argumentos
Scope

2 Bucles y control de flujo


Condicionales
Loops
Loops implícitos

3 Debugging

4 Operaciones de agrupación, unión y modificación de la estructura de los datos


Agrupaciones de datos
Introducción a R
Funciones
Scope

Environments

Entornos como scope

Los entornos son como compartimentos separados donde se almacenan las estructuras y funciones de datos.
Permiten distinguir entre nombres idénticos de diferentes ámbitos, ya que se almacenan en diferentes
entornos. Los entornos se pueden crear y los existentes pueden manipularse o eliminarse.

Tipos de environments

1 El global environment se reserva para objetos definidos por el usuario. ls() muestra el entorno global actual.

2 Package environments and namespace. Representa entornos que controlan diferentes aspectos de una
búsqueda de un objeto determinado. Ej.: ls("package:graphics") muestra las funciones de dicho paquete.
3 Local o lexical environment. Cuando se invoca una función, se crea un entorno local que contiene todos los
objetos y variables creados y visibles para ésta, incluidos los argumentos proporcionados tras la ejecución.
Ello permite nombres de argumentos idénticos a otros nombres de objeto accesibles en un espacio de trabajo.

Search path

Para acceder a estructuras y funciones de datos desde entornos que no sean el entorno global, R sigue una
ruta de búsqueda que contiene todos los entornos a los que una sesión R tiene acceso. La ruta de búsqueda
es básicamente una lista de los entornos que R buscará cuando se solicite un objeto. Si el objeto no se
encuentra en un entorno, R pasa al siguiente.
search() muestra la ruta de búsqueda y search() y search.paths() los directorios de búsqueda.
environment(<function>) muestra, configura y crea entornos.

Identificadores reservadas y protegidas

Reservados: if, else, for, while, in, function, repeat, break, next, TRUE, FALSE, Inf, -Inf, NA, NaN, NULL
Introducción a R
Funciones
Scope

Ejercicio 1: Funciones

Enunciado

1 Cree una función que devuelva el cuadrado de la suma de una secuencia de -1 a 5 en intervalos de
0.1.
2 Reescriba la función anterior para que el inicio y el final de la secuencia los puede elegir el usuario
y los intervalos se puedan especificar o no.
3 Reescriba la función anterior para que elija entre suma y producto en el ejercicio anterior.
4 Cree una función que dado un vector y un valor numérico permita detectar cuantas veces aparece
dicho valor
5 Identifique los primeros 10 elementos contenidos en el paquete built-in stats y el número de
elementos en total segundo.
6 Determine el entorno que posee cada una de las siguientes funciones: read.table, data, matrix,
jpeg
7 Use ls() e igualdad de strings para confirmar la función smoothScatter es parte del paquete de
graphics.
Introducción a R
Funciones
Scope

Solución Ejercicio 1: Funciones


Introducción a R
Bucles y control de flujo

Outline

1 Funciones
De scripts a funciones
Argumentos
Scope

2 Bucles y control de flujo


Condicionales
Loops
Loops implícitos

3 Debugging

4 Operaciones de agrupación, unión y modificación de la estructura de los datos


Agrupaciones de datos
Introducción a R
Bucles y control de flujo
Condicionales

Outline

1 Funciones
De scripts a funciones
Argumentos
Scope

2 Bucles y control de flujo


Condicionales
Loops
Loops implícitos

3 Debugging

4 Operaciones de agrupación, unión y modificación de la estructura de los datos


Agrupaciones de datos
Introducción a R
Bucles y control de flujo
Condicionales

IF | IF ... ELSE

IF

Una sentencia if en R consta de tres elementos: La palabra clave if,


u n único valor lógico entre paréntesis (o una expresión que
conduce a un único valor lógico), y un bloque de código entre
llaves que se ejecuta si el valor lógico es TRUE.

IF ELSE

Se usa cuando se necesita que la función haga algo si una


condición es verdadera y otra cosa si no lo es.
Se emplea la una sentencia if ... else. Contiene los mismos
elementos que if más: la palabra clave else del primer bloque de
código, un segundo bloque de código entre llaves, que se ejecuta si
y solo si el resultado de la condición en la instrucción if() es FALSE.

Ejemplo

1 Cree la función priceCalculator() que calcula el precio que cobra a un


cliente según las horas de trabajo.
2 Reescriba la función anterior, en el caso de que conceda una reducción del
10% en el precio por hora por más de 100 horas.
3 Reescriba la función anterior, en el caso de que los clientes de AA.PP.
públicas pagan solo el 6% y los privados el 12%.
Introducción a R
Bucles y control de flujo
Condicionales

IFELSE

Vectorizando

Es posible que haga falta vectorizar las condiciones lógicas de las


sentencias condicionales, ya que en caso contrario la condición solo
se aplica al primer valor.
La solución es la función ifelse(), que es una forma vectorizada
de elegir valores de vectores. Tiene tres argumentos:
1 Un vector de prueba con valores lógicos.
2 Un vector con valores que deben devolverse si el valor
correspondiente en el vector de prueba es TRUE
3 Un vector con valores que deberían devolverse si el valor
correspondiente en el vector de prueba es FALSE

Ejemplo

1 Use ifelse() para comprobar si los elementos del vector c(1,3)


son mayores o iguales a 2.5. Si es así devuelva el valor que
corresponda de una secuencia de 1 a 2 y si no de 3 a 4.
2 Vectorice la función priceCalculator3().
Introducción a R
Bucles y control de flujo
Condicionales

IFELSE (Solución)

Vectorizando

Es posible que haga falta vectorizar las condiciones lógicas de las


sentencias condicionales, ya que en caso contrario la condición solo
se aplica al primer valor.
La solución es la función ifelse(), que es una forma vectorizada
de elegir valores de vectores. Tiene tres argumentos:
1 Un vector de prueba con valores lógicos.
2 Un vector con valores que deben devolverse si el valor
correspondiente en el vector de prueba es TRUE
3 Un vector con valores que deberían devolverse si el valor
correspondiente en el vector de prueba es FALSE

Ejemplo

1 Use ifelse() para comprobar si los elementos del vector c(1,3)


son mayores o iguales a 2.5. Si es así devuelva el valor que
corresponda de una secuencia de 1 a 2 y si no de 3 a 4.
2 Vectorice la función priceCalculator3().
Introducción a R
Bucles y control de flujo
Condicionales

IF ELSE IF - SWITCH

Elecciones múltiples con IF

Con más posibilidades se puede emplear


if() {} else if() {} else {}

Elecciones múltiples Switch

Para seleccionar valores basados se usa la función


switch(<variable>, <actions,...>).

Ejemplo

1 Reescriba priceCalculator4() con else if.


2 Reescriba priceCalculator4() con switch aplicándolo solo al IVA y
donde hay tres tipos de clientes (públicos, privados y extranjeros a
los que no se le aplica).
Introducción a R
Bucles y control de flujo
Condicionales

IF ELSE IF - SWITCH (Solución)

Elecciones múltiples con IF

Con más posibilidades se puede emplear


if() {} else if() {} else {}

Elecciones múltiples Switch

Para seleccionar valores basados se usa la función


switch(<variable>, <actions,...>).

Ejemplo

1 Reescriba priceCalculator4() con else if.


2 Reescriba priceCalculator4() con switch aplicándolo solo al IVA y
donde hay tres tipos de clientes (públicos, privados y extranjeros a
los que no se le aplica).
Introducción a R
Bucles y control de flujo
Condicionales

Ejercicio 2: Condicionales (I)

Enunciado

1 Cree los siguientes vectores: vec1 <- c(2,1,1,3,2,1,0) vec2 <- c(3,8,2,2,0,0,0)
Sin ejecutarlos, determine cuáles de las siguientes sentencias imprimirán el string en consola.
Luego confirme sus respuestas en R.
1 if((vec1[1]+vec2[2])==10) cat("Print me!")
2 if(vec1[1]>=2&&vec2[1]>=2)cat("Printme!")
3 if(all((vec2-vec1)[c(2,6)]<7)) cat("Print me!")
4 if(!is.na(vec2[3]))cat("Printme!")

2 Usando vec1 y vec2 escriba y ejecute una línea de código que multiplique los elementos de los dos
vectores si su suma es mayor que 3. De lo contrario, sumará sumará los dos elementos.
3 Suponga que el objeto mynum será un entero entre 0 y 9. Use ifelse y switch para escribir un
comando que tome mynum y devuelva una cadena de caracteres coincidente para todos los valores
posibles. Si se le pasa 3, por ejemplo, debe devolver "tres"; Si se le pasa 0, debe devolver "cero".
4 Suponga que tiene una lista mylist que puede contener otras listas como miembros, pero asume
que esas "listas de miembros" no pueden contener listas. Escriba bucles que busque cualquier
posible lista definida de esta manera y cuente las matrices. Sugerencia: configurar un contador
antes de los bucles que se incrementa cuando encuentra una matriz, independientemente de si es
un miembro directo de mylist o es miembro de una lista de miembros. Luego confirma lo siguiente:
Introducción a R
Bucles y control de flujo
Condicionales

Ejercicio 2: Condicionales (II)

Enunciado

4 (continúa de la página anterior)


1 Que la respuesta es 4 si tienes

2 Que la respuesta es 0 si tienes

3 Que la respuesta es 2 si tienes


Introducción a R
Bucles y control de flujo
Condicionales

Solución Ejercicio 2: Condicionales


Introducción a R
Bucles y control de flujo
Loops

Outline

1 Funciones
De scripts a funciones
Argumentos
Scope

2 Bucles y control de flujo


Condicionales
Loops
Loops implícitos

3 Debugging

4 Operaciones de agrupación, unión y modificación de la estructura de los datos


Agrupaciones de datos
Introducción a R
Bucles y control de flujo
Loops

FOR

Bucles con FOR

For consta de las siguientes partes:


1 La palabra clave for, seguida de paréntesis.
2 Un vector con valores para repetir.
3 Un bloque de código entre llaves que debe llevarse a cabo
para cada valor en los valores del objeto.
Se construye un bucle con la siguiente sintaxis:
for (i in values){
actions
...
}

Ejemplo

1 Cree un data frame con los siguientes valores c(25, 110, 125, 40)
para la variable hours y la variable type con los siguientes tipos de
clientes c("public", "abroad", "private", "abroad").
2 Vectorice priceCalculator6().
Introducción a R
Bucles y control de flujo
Loops

FOR (Solución)

Bucles con FOR

For consta de las siguientes partes:


1 La palabra clave for, seguida de paréntesis.
2 Un vector con valores para repetir.
3 Un bloque de código entre llaves que debe llevarse a cabo
para cada valor en los valores del objeto.
Se construye un bucle con la siguiente sintaxis:
for (i in values){
actions
...
}

Ejemplo

1 Cree un data frame con los siguientes valores c(25, 110, 125, 40) para la
variable hours y la variable type con los siguientes tipos de clientes
c("public", "abroad", "private", "abroad").
2 Vectorice priceCalculator6().

Otros elementos de bucles

next hace saltar a la siguiente iteración de un bucle sin ejecutar el código restante. break termina
el loop en cualquier punto. while crea un loop que continúa mientras la condición sea TRUE.
Introducción a R
Bucles y control de flujo
Loops implícitos

Outline

1 Funciones
De scripts a funciones
Argumentos
Scope

2 Bucles y control de flujo


Condicionales
Loops
Loops implícitos

3 Debugging

4 Operaciones de agrupación, unión y modificación de la estructura de los datos


Agrupaciones de datos
Introducción a R
Bucles y control de flujo
Loops implícitos

Loops implícitos en objetos con dimensiones

apply

Hay situaciones, como bucles rutinarios (ej.: ejecutar alguna


función a cada miembro de una lista) que es mas eficiente
usar apply. La función apply es la forma más básica de bucle
implícito: toma una función y la aplica a cada elemento de un
array. Cada una de las funciones apply toma al menos dos
argumentos: un objeto y otra función.
Ninguna de estas funciones de aplicación tiene efectos
secundarios. Esta es la razón principal para usarlas.

Ejemplo

1 Cree una matriz 3 × 3 con los valores c(3, 2, 4, 6, 5, 1, 8,


6, 1) y asigne a las columnas los siguientes nombres
c("loro", "paloma", "cuervo"). Dicha matriz contiene el
número y tipo de pájaro avistado durante tres observaciones.
2 Aplique apply a la matriz anterior para calcular el número
máximo de cada tipo de pájaro avistado en un día.
Introducción a R
Bucles y control de flujo
Loops implícitos

Loops implícitos en listas

sapply y lapply

Hay dos funciones para los loops implicítos en objetos


adimensionales como las listas: sapply() y lapply().
Ambas funcionan similar: la única diferencia es que lapply()
siempre devuelve una lista con el resultado, mientras que sapply()
simplifica el objeto final si es posible.

Ejemplo

1 Aplique sapply() y lapply() a un vector compuesto por "a", "b"


de manera con switch() identifiquemos "a" con "Hola" y "b" con
mundo.

Ejercicio extra

1 Reescriba priceCalculator7() sustituyendo el bucle for por un


bucle implícito.
Introducción a R
Bucles y control de flujo
Loops implícitos

Loops implícitos en listas (Solución)

sapply y lapply

Hay dos funciones para los loops implicítos en objetos


adimensionales como las listas: sapply() y lapply().
Ambas funcionan similar: la única diferencia es que lapply()
siempre devuelve una lista con el resultado, mientras que sapply()
simplifica el objeto final si es posible.

Ejemplo

1 Aplique sapply() y lapply() a un vector compuesto por "a", "b"


de manera con switch() identifiquemos "a" con "Hola" y "b" con
mundo.

Ejercicio extra

1 Reescriba priceCalculator7() sustituyendo el bucle for por un


bucle implícito.
Introducción a R
Bucles y control de flujo
Loops implícitos

Ejercicio 3: Bucles y control de flujo

Enunciado

1 Cree una función que devolverá TRUE si un entero dado está dentro de un vector.
2 Cree la función única, que dado un vector devolverá un nuevo vector con los elementos del primer
vector con elementos duplicados eliminados.
3 Cree una función que dado un data frame (puede usar cars) y un número o carácter devolverá el
data.frame con el carácter o número cambiado a NA.
4 Convierta el bucle for en un bucle implícito que haga exactamente lo mismo:

5 Escriba una función llamada my.factorialcon un bucle while que calcule y almacene como un
objeto nuevo el factorial (x! = x · (x − 1) · (x − 2) · ...∀(x − n) > 1) de cualquier mynum entero
no negativo al disminuir num en 1 en cada iteración.
Introducción a R
Bucles y control de flujo
Loops implícitos

Solución Ejercicio 3: Bucles y control de flujo


Introducción a R
Debugging

Outline

1 Funciones
De scripts a funciones
Argumentos
Scope

2 Bucles y control de flujo


Condicionales
Loops
Loops implícitos

3 Debugging

4 Operaciones de agrupación, unión y modificación de la estructura de los datos


Agrupaciones de datos
Introducción a R
Debugging

Visual debugging con RStudio

Características

1 Una interesante característica de RStudio son sus herramientas integradas para debugging.
2 Debugging generalmente implica "pausar" el código en un punto específico para inspeccionar sus
objetos y valores de función en un estado dado.

Ejemplo

1 La forma más sencilla es


asignar breakpoints y
ejecutar línea a línea
revisando el contenido de
las variables.
2 Haga debugging de las
funciones que aparecen
en la imagen.
Introducción a R
Operaciones de agrupación, unión y modificación de la estructura de los datos

Outline

1 Funciones
De scripts a funciones
Argumentos
Scope

2 Bucles y control de flujo


Condicionales
Loops
Loops implícitos

3 Debugging

4 Operaciones de agrupación, unión y modificación de la estructura de los datos


Agrupaciones de datos
Introducción a R
Operaciones de agrupación, unión y modificación de la estructura de los datos
Agrupaciones de datos

Outline

1 Funciones
De scripts a funciones
Argumentos
Scope

2 Bucles y control de flujo


Condicionales
Loops
Loops implícitos

3 Debugging

4 Operaciones de agrupación, unión y modificación de la estructura de los datos


Agrupaciones de datos
Introducción a R
Operaciones de agrupación, unión y modificación de la estructura de los datos
Agrupaciones de datos

Elección y subsets

Cómo representar los datos

1 La primera decisión antes de analizar datos es cómo representarlos.


2 Si los datos tienen una sola dimensión, los vectores son adecuados, pero si tienen más de una
dimensión se pueden usar matrices, listas o data frames.
3 Las matrices y arrays multidimensionales son útiles cuando todos sus datos son de una sola clase.
4 Con clases diferentes (mezcla de datos numéricos y caracteres) debe usar listas o marcos de datos.

Subsets

1 $ selecciona un único componente de los datos. Cuando usa este operador en un data frame, el
resultado siempre es un vector; cuando se usa en una lista con nombre, obtiene el componente
nombrado.
2 El operador [[ devuelve un solo componente, pero permite referirse a los componentes por
posición, en lugar de por nombre. Se usa en data frames y listas.
3 El operador [ puede devolver varios componentes de los datos.
4 Los operadores [[ y [ difieren en: la cantidad de componentes que puede seleccionar y el tipo de
objeto que se devuelve. Mientras que [[ devuelve el componente en sí, [ devuelve un objeto del
mismo tipo que el que subconjunto
Introducción a R
Operaciones de agrupación, unión y modificación de la estructura de los datos
Agrupaciones de datos

Subconjuntos

Creación de un número fijo de conjuntos

1 La función cut() crea grupos de igual tamaño (por defecto) en sus


datos y luego clasifica cada elemento en su grupo adecuado.

Ejemplo

1 Para ilustrar el uso de cut() se usa el conjunto de datos state.x77


que es una matriz con varias columnas y una fila para cada estado
en los Estados Unidos.
2 Queremos trabajar con la columna llamada Frost. Para extraer esta
columna frost <- state.x77[, "Frost"]
3 Ahora tiene un objeto nuevo, frost, un vector numérico con
nombre. Ahora use cut() para crear tres contenedores de datos
cut(frost, 3, include.lowest=TRUE).
4 El resultado es un factor con tres niveles. Los nombres de los
niveles dicen cuáles son los límites de tus grupos. Ej.: el primer
grupo contiene los estados que tienen heladas entre -0.188 y 62.6
días. En realidad, por supuesto, ninguno de los estados tendrá
heladas en días negativos: R es matemáticamente conservador y
agrega un poco de relleno.
Introducción a R
Operaciones de agrupación, unión y modificación de la estructura de los datos
Agrupaciones de datos

Introducción a R
Codificación

José Luis Salmerón

19 de octubre de 2017

Potrebbero piacerti anche