Sie sind auf Seite 1von 50

PROGRAMACIÓN ESTADÍSTICA CON R

Abraham Zamudio

CENTRO DE TECNOLOGÍAS DE INFORMACIÓN Y COMUNICACIONES


Programa de Iniciacion Tecnologica PIT 2020-II

Abril 2020

Abraham Zamudio (GMMNS) 1 / 50


Contenido de la Clase

Introducción

Programación básica en R

Abraham Zamudio (GMMNS) 2 / 50


Introducción

Introducción Abraham Zamudio (GMMNS) 3 / 50


¿Cuál es el papel de un profesional en Ciencia de datos?

Dentro de este ecosistema y en los albores del 5G su función es simple


y extremadamente compleja a la vez.

El Director de Ingenierı́a de Datos de Slack, Josh Wills, plantea una


curiosa definición sobre el rol del Cientı́fico de Datos, como la persona
que sabe más de estadı́stica que cualquier programador y
que a la vez sabe más de programación que cualquier
estadı́stico.

Introducción Abraham Zamudio (GMMNS) 4 / 50


¿Qué es el Análisis de Datos?

El análisis de datos es el proceso de evaluar datos utilizando herramientas


analı́ticas y estadı́sticas para descubrir información útil y ayudar en la
toma de decisiones empresariales. Existen varios métodos de análisis de
datos que incluyen minerı́a de datos, análisis de texto, inteligencia de
negocios, visualización de datos, procesamiento distribuido, calculo de
pronósticos ,etc.
Las conclusiones obtenidas serán útiles para el desarrollo de pro-
ductos demandados en el mercado o la generación de oportunida-
des de negocio en una empresa.

Introducción Abraham Zamudio (GMMNS) 5 / 50


¿Qué es un Cientı́fico de Datos?

Desarrolladores de software con sólidas bases en matemáticas (estadı́sti-


cas), que ahora están potencialmente demandados como nunca antes.
A medida que los conjuntos de
datos se han hecho más grandes y
las habilidades computacionales se
han vuelto más crı́ticas para
trabajar con datos, lo que solı́a ser
un simple reto se ha vuelto casi
imposible. La actual escasez de
talentos significa que necesitamos
identificar y desarrollar personas
con antecedentes en matemática,
estadı́stica, ingenierı́a de software e
investigación cientı́fica.

Introducción Abraham Zamudio (GMMNS) 6 / 50


Ecosistema de la Ciencia de datos (I)
El conjunto de tecnologı́as utilizadas para hacer ciencia de datos varı́a
según las organizaciones. Cuanto mayor es la organización o mayor es
la cantidad de datos que se procesan o ambos, mayor es la complejidad
del ecosistema tecnológico que respalda las actividades de ciencia de
datos. En la mayorı́a de los casos, este ecosistema contiene herramien-
tas y componentes de un númerode diferentes proveedores de software,
procesando datos en muchos formatos diferentes. Existe un espectro
de enfoques entre los que una organización puede seleccionar cuando
desarrolla su propio ecosistema de ciencia de datos. En un extremo del
espectro, la organización puede decidir invertir en un conjunto de herra-
mientas integradas comerciales.En el otro extremo, podrı́a construir un
ecosistema a medida integrando un conjunto de herramientas y lengua-
jes de código abierto. Entre estos dos extremos, algunos proveedores de
software ofrecen soluciones que consisten en una mezcla de productos
comerciales y productos de código abierto.

Introducción Abraham Zamudio (GMMNS) 7 / 50


Ecosistema de la Ciencia de datos (II)

Sin embargo, aunque la combinación particular de herramientas variará


de una organización a otra, existe una coincidencia en términos de los
componentes que están presentes en la mayorı́a de las arquitecturas de
ciencia de datos.
La figura del siguiente slide ofrece una descripción general de alto nivel
de una arquitectura de datos tı́pica. Esta arquitectura no es solo para
entornos de big data, sino también para entornos de datos de todos
los tamaños. En este diagrama, las tres áreas principales consisten en
fuentes de datos, donde se generan todos los datos en una organización;
almacenamiento de datos, donde los datos se almacenan y procesan;
y aplicaciones, donde los datos se comparten con los consumidores de
estos datos.

Introducción Abraham Zamudio (GMMNS) 8 / 50


Ecosistema de la Ciencia de datos (III)

Todas las organizaciones tienen aplicaciones que generan y capturan da-


tos sobre clientes, transacciones y datos operativos sobre todo lo que
tiene que ver con la forma en que opera la organización. Dichas fuentes
de datos y aplicaciones incluyen gestión de clientes, pedidos, fabrica-
ción, entrega, facturación, banca, finanzas, gestión de relaciones con
clientes (CRM), centro de llamadas, aplicaciones de planificación de re-
cursos empresariales (ERP), etc. Estos tipos de aplicaciones se conocen
comúnmente como sistemas de procesamiento de transacciones en lı́nea
(OLTP). Para muchos proyectos de ciencia de datos, los datos de estas
aplicaciones se utilizarán para formar el conjunto de datos de entrada
inicial para los algoritmos de ML.

Introducción Abraham Zamudio (GMMNS) 9 / 50


Ecosistema de la Ciencia de datos (IV)

Figura: Hortonworks (2013)

Introducción Abraham Zamudio (GMMNS) 10 / 50


Programación básica en R

Programación básica en R Abraham Zamudio (GMMNS) 11 / 50


¿Por qué aprender R?

R fue diseñado por estadı́sticos y estaba especializado en programación


estadı́stica, por lo que se le conoce como la lengua franca de las estadı́sti-
cas computacionales. R es ideal para el aprendizaje automático (machine
learning ), la visualización y el análisis de datos, ası́ como algunas áreas
de la computación cientı́fica.
I El estilo de codificación es bastante fácil.
I Es open source. No es necesario pagar
ningún cargo de suscripción.
I Al 2019, se tenia mas de 14000 paquetes en
el CRAN.
I El apoyo de la comunidad es abrumador.
Hay numerosos foros para ayudarte.
I Tiene soporte para HPC.

Programación básica en R Abraham Zamudio (GMMNS) 12 / 50


Instalar R y Rstudio

1. R

2. Rstudio

Programación básica en R Abraham Zamudio (GMMNS) 13 / 50


Instalar R y Rstudio

Programación básica en R Abraham Zamudio (GMMNS) 14 / 50


Funciones : getwd(), setwd,help

Estableciendo directorios de trabajo


R siempre apunta a un directorio de la computadora, se puede averiguar
en qué directorio se encuentra ejecutando la función getwd() (obtener
directorio de trabajo). Esta función no tiene argumentos
Función getwd()
1 getwd ( )

Programación básica en R Abraham Zamudio (GMMNS) 15 / 50


Funciones : getwd , setwd() ,help

Estableciendo directorios de trabajo


Para cambiar de directorio de trabajo, use setwd() y especifique la ruta
a la carpeta deseada.
Función setwd()
1 s e t w d ( ” . . / D e s k t o p / C u r s o R CTIC/ ” )
2 getwd ( )
3 [ 1 ] ”TU USUARIO/ D es kt op / C u r s o R CTIC”

Programación básica en R Abraham Zamudio (GMMNS) 16 / 50


Funciones : getwd , setwd, help()

Consultando la ayuda en linea de R


¿Cómo obtenemos ayuda en R?
Veamos los siguientes comandos .
Función help()
1 help . s t a r t ()
2 h e l p ( mean )
3 ?mean
4 h e l p . s e a r c h ( ”mean” )

Otras fuentes de ayuda son las listas de correo :


? R-help – Main R Mailing List: Primary help

? R-help-es – Ayuda sobre R en español

? stackoverflow - R Programming Language

Programación básica en R Abraham Zamudio (GMMNS) 17 / 50


Otras Funciones importantes

? utils::sessionInfo()
? installed.packages()
? ls()
? rm()
? options()
? history()
? q()

Programación básica en R Abraham Zamudio (GMMNS) 18 / 50


Cálculos básicos en R

1 > 2 + 3
2 > 5 1 # En R s e puede a s i g n a r e l v a l o r a
3 2 # una v a r i a b l e con <− o =
4 > (3 ∗ 8) / (2 ∗ 3) 3 > x <− 8 + 7
5 > 4 4 > x
6 5 > 15
7 > log (12)
8 > 1.07
Una vez que creamos una variable, ya no
9 obtienes la salida directamente (como la
10 > s q r t (121) calculadora), a menos que llames a la
11 > 11 variable en la siguiente lı́nea. Recuerde, las
Del mismo modo, puede variables pueden ser alfabetos,
experimentar varias alfanuméricos pero no numéricos. No
combinaciones de cálculos y puedes crear variables numéricas.
obtener los resultados.

Programación básica en R Abraham Zamudio (GMMNS) 19 / 50


Fundamentos de la programación en R (i)
Todo lo que ves o creas en R es un objeto. Un vector, matriz, data-
frame, incluso una variable es un objeto. R lo trata de esa manera.
Entonces, R tiene 5 clases básicas de objetos. Esto incluye:
1. Character
2. Numeric (Números reales)
3. Integer (números enteros)
4. Complex
5. Logical (True / False)
Un objeto puede tener los siguientes atributos:
1. names, dimension names
2. dimensions
3. class
4. length

Programación básica en R Abraham Zamudio (GMMNS) 20 / 50


Fundamentos de la programación en R (ii)

Por ejemplo: creemos vectores de diferentes clases. Podemos crear vec-


tores usando la función c().
1 > a <− c (1.8 , 4.5) #n u m e r i c
2 > b <− c ( 1 + 2 i , 3 − 6 i ) #c o m p l e x
3 > d <− c (23 , 44) #i n t e g e r
4 > e <− v e c t o r ( ” l o g i c a l ” , l e n g t h = 5)

Programación básica en R Abraham Zamudio (GMMNS) 21 / 50


Tipos de datos en R (i)
vector

Un vector contiene objetos de la misma clase. Pero también puedes


mezclar objetos de diferentes clases. Cuando los objetos de diferentes
clases se mezclan en una lista, ocurre la coerción. Este efecto hace que
los objetos de diferentes tipos se conviertan en una clase. Por ejemplo:
1 > q t <− c ( ” Time ” , 2 4 , ” O c t o b e r ” , TRUE, 3 . 3 3 ) #c h a r a c t e r
2 > ab <− c (TRUE, 2 4 ) #n u m e r i c
3 > cd <− c ( 2 . 5 , ”May” ) #c h a r a c t e r
Para verificar la clase de cualquier objeto, utilice la función
class(”nombre de vector”).
1 > c l a s s ( qt )

Programación básica en R Abraham Zamudio (GMMNS) 22 / 50


Tipos de datos en R (ii)
vector

Para convertir la clase de un vector, puede usar el comando as.


1 > b a r <− 0 : 5 Del mismo modo, puede cambiar la
2 > c l a s s ( bar ) clase de cualquier vector. Pero,
3 > ” integer ”
deberı́as prestar atención aquı́. Si
4 > as . numeric ( bar )
5 > c l a s s ( bar ) intentas convertir un vector de
6 > ” numeric ” caracteres a numérico, se
7 > as . c h a r a c t e r ( bar ) introducirán NA. Por lo tanto, debe
8 > c l a s s ( bar )
tener cuidado al usar este comando.
9 > ” character ”

Programación básica en R Abraham Zamudio (GMMNS) 23 / 50


Tipos de datos en R (iii)
listas

Una lista es un tipo especial de vector que contiene elementos de dife-


rentes tipos de datos. Por ejemplo:
1 > my l i s t <− l i s t ( 2 2 , ” ab ” , TRUE, 1 + 2 i )
2 > my l i s t
Como se puede ver, el resultado de una lista es diferente al de un
vector. Esto se debe a que todos los objetos son de diferentes tipos. El
corchetes dobles [[1]] muestra el ı́ndice del primer elemento y ası́
sucesivamente. Por lo tanto, puede extraer fácilmente el elemento de
las listas según su ı́ndice.

Programación básica en R Abraham Zamudio (GMMNS) 24 / 50


Tipos de datos en R (iv)
matrices

Cuando se introduce un vector en el formato de fila y columna, es decir,


un atributo de dimensión, se convierte en una matriz. Una matriz está
representada por un conjunto de filas y columnas. Es una estructura de
datos bidimensional. Consiste en elementos de la misma clase. Creemos
una matriz de 3 filas y 2 columnas:
1 > my m a t r i x <− m a t r i x ( 1 : 6 , nrow =3, n c o l =2)
2 > my m a t r i x
3
4 > dim (my m a t r i x )
5
6 > a t t r i b u t e s (my m a t r i x )

Programación básica en R Abraham Zamudio (GMMNS) 25 / 50


Tipos de datos en R (v)
matrices

Como puede ver, las dimensiones de una matriz se pueden obtener uti-
lizando el comando dim() o el comando attributes(). Para extraer un
elemento particular de una matriz, simplemente use el ı́ndice. Por ejem-
plo:
1 > my matrix [ ,2] #e x t r a e la segunda columna
2 > my matrix [ ,1] #e x t r a e la primera columna
3 > my matrix [2 ,] #e x t r a e la segunda fila
4 > my matrix [1 ,] #e x t r a e la primera fila

Programación básica en R Abraham Zamudio (GMMNS) 26 / 50


Tipos de datos en R (vi)
matrices

Como hecho interesante, también se puede crear una matriz a partir de


un vector. Todo lo que necesita hacer es asignar la dimensión dim() :
1 > age <− c ( 2 3 , 4 4 , 1 5 , 1 2 , 3 1 , 1 6 )
2
3 > dim ( age ) <− c ( 2 , 3 )
4
5 > c l a s s ( age )

Programación básica en R Abraham Zamudio (GMMNS) 27 / 50


Tipos de datos en R (vii)
matrices

También se puede unir dos vectores usando las funciones cbind() y


rbind(). Pero, asegúrese de que ambos vectores tengan el mismo número
de elementos. Si no, devolverá los valores de NA.
1 > x <− c ( 1 , 2 , 3 , 4 , 5 , 6 )
2 > y <− c ( 2 0 , 3 0 , 4 0 , 5 0 , 6 0 )
3 > cbind (x , y )
4 > cbind (x , y )
5 > c l a s s ( cbind (x , y ) )

Programación básica en R Abraham Zamudio (GMMNS) 28 / 50


Tipos de datos en R (viii)
Dataframes

Este es el miembro más utilizado de la familia de tipos de datos. Se


utiliza para almacenar datos tabulados (Tipo una de calculo de excel).
Es diferente de la matriz. En una matriz, cada elemento debe tener la
misma clase. Pero, en un dataframe , puede poner una lista de vec-
tores que contienen diferentes clases. Esto significa que cada columna
de un dataframe actúa como una lista. Cada vez que lea datos en R,
se almacenarán en forma de un dataframe. Por lo tanto, es importante
comprender los comandos más utilizados en los dataframes :
1 > d f <− d a t a . f r a m e ( name = c ( ” a s h ” , ” j a n e ” , ” p a u l ” , ” mark ” ) ,
score = c (67 ,56 ,87 ,91) )
2 > df
3 > dim ( d f )
4 > s t r ( df )
5 > nrow ( d f )
6 > ncol ( df )

Programación básica en R Abraham Zamudio (GMMNS) 29 / 50


Tipos de datos en R (ix)
Dataframes

Observación 1
Las variables continuas son aquellas que pueden tomar cualquier
forma, como 1, 2, 3.5, 4.66, etc. Las variables categóricas son aquellas
que toman solo valores discretos como 2, 5, 11, 15, etc. En R, los
valores categóricos están representados por factores. En df, name es
una variable de tipo factor que tiene 4 niveles únicos.

Programación básica en R Abraham Zamudio (GMMNS) 30 / 50


Tipos de datos en R (ix)
Dataframes

Ahora comprendamos el concepto de valores perdidos (missing values)


en R. Esta es una de las partes más dolorosas pero cruciales del mode-
lo predictivo. Debe conocer todas las técnicas para lidiar con ellas. Los
valores faltantes en R están representados por NA y NaN. Ahora com-
probaremos si un conjunto de datos tiene valores faltantes (utilizando el
mismo dataframe df).
1 # i n s e r t a m o s NA en l a s d o s p r i m e r a s
2 # f i l a s de l a 2 da columna
3 > d f [ 1 : 2 , 2 ] <− NA
4 > df
5
6 # v e r i f i c a m o s e l c o n j u n t o de d a t o s e n t e r o en
7 # b u s q u e d a de d a t o s NA y r e t o r n a una v a r i a b l e
8 # logica
9 > i s . na ( d f )

Programación básica en R Abraham Zamudio (GMMNS) 31 / 50


Tipos de datos en R (x)
Dataframes

Los valores faltantes dificultan los cálculos normales en un conjunto de


datos. Por ejemplo, digamos, queremos calcular la media de la varia-
ble score. Como faltan dos valores, no se puede hacer directamente.
Veamos:
1 > mean ( d f $ s c o r e )
2
3 > mean ( d f $ s c o r e , na . rm = TRUE)
El uso del parámetro na.rm = TRUE le dice a R que ignore los NA
y calcule la media de los valores restantes en la columna seleccionada
(score). Para eliminar filas con valores de NA en un dataframe, puede
usar na.omit:
1 > new d f <− na . o m i t ( d f )
2
3 > new d f

Programación básica en R Abraham Zamudio (GMMNS) 32 / 50


Tipos de datos en R (x)
Dataframes
Cuando se instalan paquetes/librerı́as de R, estos vienen con muchos
dataframes de ejemplo.Para ver el listado de paquetes ejecute la función
:
1 data ()
Otros paquetes con data frames de ejemplo son :
? MASS
? ISLR
? boot
? cadData
? DAAG
? Ecdat
? forecast
? HistData
Programación básica en R Abraham Zamudio (GMMNS) 33 / 50
Funciones en R (i)

Ya hemos visto el uso de funciones, aunque probablemente no pensaste


mucho en ello cuando viste expresiones como:
1 l e n g t h ( ” qax ” )

No lo pensaste porque no habı́a nada


sorprendente al respecto. Simplemente usa
la notación matemática habitual para las
funciones: f (x). Si desea llamar a una
función, simplemente use esta notación y
asigne a la función sus parámetros entre
paréntesis.

Programación básica en R Abraham Zamudio (GMMNS) 34 / 50


Funciones en R (ii)

Observación
En R, también puede usar los nombres de los parámetros al llamar a
una función, además de las posiciones. Si tiene una función f (x, y) de
dos parámetros, x e y, llamar a f (5,10) significa llamar a f con el
parámetro x establecido en 5 y el parámetro y establecido en 10.
1 f (5 , 10)
2 f ( x = 5 , y = 10)
3
4 # S i e s p e c i f i c a l o s nombres de l o s p a r a m e t r o s , e l o r d e n
5 # ya no i m p o r t a , p o r l o que o t r a l l a m a d a de f u n c i o n
6 # equivalente seria :
7 f ( y = 10 , x = 5)
8
9 # Puede c o m b i n a r l a s d o s f o r m a s de p a s a r p a r a m e t r o s
10 # a f u n c i o n e s s i e m p r e que c o l o q u e t o d o s l o s p a r a m e t r o s
11 # p o s i c i o n a l e s a n t e s de l o s nombrados .
12 f (5 , y = 10)

Programación básica en R Abraham Zamudio (GMMNS) 35 / 50


Funciones en R (iii)
Escribiendo tus propias funciones

Puede escribir fácilmente sus propias funciones. Utiliza expresiones de


función para definir una función y una asignación para dar un nombre
a una función. Por ejemplo, para escribir una función que calcule el
cuadrado de un número, puede escribir:
1 s q u a r e <− f u n c t i o n ( x ) x ∗ ∗ 2
2 square (1:4)
Las funciones que escribe usted mismo funcionan como cualquier
función que ya sea parte de R o parte de un paquete R. Sin embargo,
con una excepción: no tendrá documentación para sus propias
funciones a menos que la escriba.

Programación básica en R Abraham Zamudio (GMMNS) 36 / 50


Funciones en R (iv)
Escribiendo tus propias funciones
La función square solo realiza una operación aritmética simple en su
entrada. A veces quieres que la función haga más de una sola cosa. Si
desea que la función realice varias operaciones con su entrada, necesita
varias declaraciones para la función, y en ese caso debe darle un cuerpo
de varias declaraciones, y dicho cuerpo debe ir entre llaves ().
1 s q u a r e and s u b t r a c t <− f u n c t i o n ( x , y ) {
2 s q u a r e d <− x ∗ ∗ 2
3 squared − y
4 }
5
6 s q u a r e and s u b t r a c t ( 1 : 5 , r e v ( 1 : 5 ) )

Observación
(Verifique la documentación de rev para ver qué está pasando aquı́.
Asegúrese de comprender lo que está haciendo este ejemplo).

help(rev)

Programación básica en R Abraham Zamudio (GMMNS) 37 / 50


Funciones en R (v)
Escribiendo tus propias funciones

El resultado de una función, lo que devuelve como valor cuando la llamas,


es la última declaración o expresión (realmente no hay ninguna diferen-
cia entre las declaraciones y las expresiones en R; son lo mismo). Sin
embargo, se puede hacer que el valor de retorno sea explı́cito, utilizando
la expresión return() .
1 s q u a r e and s u b t r a c t <− f u n c t i o n ( x , y ) r e t u r n ( x ∗ ∗ 2 − y )
Por lo general, esto solo se usa cuando desea devolver un valor antes
del final de la función, y para ver ejemplos de esto, realmente necesita
estructuras de control.

Programación básica en R Abraham Zamudio (GMMNS) 38 / 50


Funciones en R (vi)
Escribiendo tus propias funciones

Observacion
Sin embargo, un punto importante aquı́, si está acostumbrado a
programar en otros lenguajes: la expresión return() debe incluir los
paréntesis. En la mayorı́a de los lenguajes de programación, puedes
escribir:
1 s q u a r e and s u b t r a c t <− f u n c t i o n ( x , y ) r e t u r n x ∗ ∗ 2 − y
Esto no funciona para R. Inténtalo y obtendrás un error.

Programación básica en R Abraham Zamudio (GMMNS) 39 / 50


Un vistazo rápido a las estructuras de control (i)

Si bien llegas muy lejos simplemente usando expresiones, para muchos


cálculos necesitas una programación más compleja. No es que sea par-
ticularmente complejo, pero debes poder seleccionar una opción de
qué hacer en función de los datos y formas de iterar a través de los
datos.

Programación básica en R Abraham Zamudio (GMMNS) 40 / 50


Un vistazo rápido a las estructuras de control (ii)
Sentencia IF

if (<boolean expression>) <expression>

1 # E s t o no h a r a nada
2 i f (2 > 3) ” f a l s e ”
3 # Esto siempre se e j e c u t a
4 i f (3 > 2) ” t r u e ”
5 ## [ 1 ] ” t r u e ”
Para expresiones como las que siguen a continuación , donde no altera-
mos el estado del programa al evaluar la expresión, no hay mucho efecto
al evaluar la expresión if. Si, por ejemplo, lo asignamos a una variable,
habrá un efecto.
1 x <− ” f o o ”
2 i f ( 2 > 3 ) x <− ” b a r ”
3 x
4 ## [ 1 ] ” f o o ”
5 i f ( 3 > 2 ) x <− ” baz ”
6 x
7 ## [ 1 ] ” baz ”
Programación básica en R Abraham Zamudio (GMMNS) 41 / 50
Un vistazo rápido a las estructuras de control (iii)
Sentencia IF

Si desea tener efectos para las expresiones TRUE y FALSE, tiene esto:

if (<boolean expression>) <true expr> else <false expr>

1 i f ( 2 > 3 ) ” b a r ” e l s e ” baz ”
2 ## [ 1 ] ” baz ”
Si desea nuevas lı́neas en declaraciones if, ya sea que tenga una parte
else o no, necesita llaves. Esto no funcionará:
1 i f (2 > 3)
2 x <− ” b a r ”
Pero esto si
1 i f (2 > 3) {
2 x <− ” b a r ”
3 }

Programación básica en R Abraham Zamudio (GMMNS) 42 / 50


Un vistazo rápido a las estructuras de control (iv)
Sentencia IF

Sin embargo, no puede usarlo para expresiones vectorizadas, ya que la


expresión booleana, si le da un vector, evaluará el primer elemento en el
vector:
1 x <− 1 : 5
2 i f ( x > 3 ) ” b a r ” e l s e ” baz ”
3 ## Warning i n i f ( x > 3 ) ” b a r ” e l s e ” baz ” : t h e
4 ## c o n d i t i o n h a s l e n g t h > 1 and o n l y t h e f i r s t
5 ## e l e m e n t w i l l be u s e d
6 ## [ 1 ] ” baz ”

Programación básica en R Abraham Zamudio (GMMNS) 43 / 50


Un vistazo rápido a las estructuras de control (v)
Sentencia IF

Si desea una versión vectorizada de sentencias if, puede usar la función


ifelse:
1 x <− 1 : 5
2 i f e l s e ( x > 3 , ” b a r ” , ” baz ” )
3 ## [ 1 ] ” baz ” ” baz ” ” baz ” ” b a r ” ” b a r ”
(Lea la documentación de ifelse para obtener los detalles de esta
función).

Programación básica en R Abraham Zamudio (GMMNS) 44 / 50


Un vistazo rápido a las estructuras de control (vi)
Sentencia IF

Esto, por supuesto, también tiene consecuencias para escribir funciones


que usan declaraciones if. Si su función contiene un cuerpo que no está
vectorizado, su función tampoco lo estará.
1 maybe s q u a r e <− f u n c t i o n ( x ) {
2 i f ( x % % 2 == 0 ) {
3 x ∗∗ 2
4 } else {
5 x
6 }
7 }
8 maybe s q u a r e ( 1 : 5 )
9 ## Warning i n i f ( x % % 2 == 0 ) { : t h e c o n d i t i o n h a s
10 ## l e n g t h > 1 and o n l y t h e f i r s t e l e m e n t w i l l be u s e d
11 ## [ 1 ] 1 2 3 4 5

Programación básica en R Abraham Zamudio (GMMNS) 45 / 50


Un vistazo rápido a las estructuras de control (vii)
Sentencia IF

Si desea una función vectorizada, debe usar ifelse (), o puede usar la
función vectorize() para traducir una función que no está vectorizada
en una.
1 maybe s q u a r e <− f u n c t i o n ( x ) {
2 i f e l s e ( x % %2 == 0 , x ∗ ∗ 2 , x )
3 }
4 maybe s q u a r e ( 1 : 5 )
5 ## [ 1 ] 1 4 3 16 5

Programación básica en R Abraham Zamudio (GMMNS) 46 / 50


Un vistazo rápido a las estructuras de control (viii)
Sentencia IF

Vectorización de una función


1 maybe s q u a r e <− f u n c t i o n ( x ) {
2 i f ( x % % 2 == 0 ) {
3 x ∗∗ 2
4 } else {
5 x
6 }
7 }
8 maybe s q u a r e <− V e c t o r i z e ( maybe s q u a r e )
9 maybe s q u a r e ( 1 : 5 )
10 ## [ 1 ] 1 4 3 16 5
La función Vectorize es lo que se conoce como un functor, una
función que toma una función como entrada y devuelve una función.

Programación básica en R Abraham Zamudio (GMMNS) 47 / 50


Un vistazo rápido a las estructuras de control (ix)
Sentencia FOR

Para recorrer elementos en un vector, se usan la estructura for.


1 x <− 1 : 5
2 t o t a l <− 0
3 f o r ( e l e m e n t i n x ) t o t a l <− t o t a l + e l e m e n t
4 total
5 ## [ 1 ] 15
Al igual que con las declaraciones if, si desea que el cuerpo contenga
más de una expresión, debe ponerla entre llaves.

Programación básica en R Abraham Zamudio (GMMNS) 48 / 50


Un vistazo rápido a las estructuras de control (x)
Sentencia FOR

La instrucción for se ejecuta a través de los elementos de un vector. Si


quiere los ı́ndices, puede usar la función seq along(), que, cuando se le
da un vector como entrada, devuelve un vector de ı́ndices.
1 x <− 1 : 5
2 t o t a l <− 0
3 f o r ( index i n seq along ( x ) ) {
4 e l e m e n t <− x [ i n d e x ]
5 t o t a l <− t o t a l + e l e m e n t
6 }
7 total
8 ## [ 1 ] 15

Programación básica en R Abraham Zamudio (GMMNS) 49 / 50


Un vistazo rápido a las estructuras de control (xi)
Sentencia While

También hay sentencias while para bucles. Estos se repiten siempre que
una expresión sea verdadera.
1 x <− 1 : 5
2 t o t a l <− 0
3 i n d e x <− 1
4 w h i l e ( i n d e x <= l e n g t h ( x ) ) {
5 e l e m e n t <− x [ i n d e x ]
6 i n d e x <− i n d e x + 1
7 t o t a l <− t o t a l + e l e m e n t
8 }
9 total
10 ## [ 1 ] 15

Programación básica en R Abraham Zamudio (GMMNS) 50 / 50

Das könnte Ihnen auch gefallen