[MÚSICA] [MÚSICA] [MÚSICA] En esta lección vamos a hablar de una herramienta muy importante conocida como expresión de regulares. Hasta el momento hemos visto que en el lenguaje se nos ha presentado en muchÃsimas ocasiones vectores numéricos o matrices, pero también hemos visto en algunas ocasiones algunos vectores con cadenas de caracteres, estas son muy importantes, por ejemplo, anteriormente you hemos utilizado cadenas de caracteres cuando leemos archivos con fechas que estas vienen definidas en los archivos como una cadena de caracteres. Sin embargo también hay otros tipos de cadenas con las que nos podemos encontrar, para esto R nos provee con algunas funciones que nos sirven para manipular cadenas de caracteres. Ahora veremos algunas funciones para manipular cadenas y finalizaremos entonces con el uso de las expresiones regulares para aprender a utilizar mejor estas funciones. La primera función que vamos a aprender a utilizar es la función grep, esta función toma como parámetros primero un patrón y el segundo parámetro es un vector de caracteres. Donde x es un vector de cadenas, entonces grep lo que hace es regresarnos un vector numérico en donde los números de ese vector numérico son los Ãndices donde se encontró el patrón que estamos buscando. En este ejemplo lo que vemos es que el patrón que estamos buscando es hola en minúsculas, es importante saber que este patrón es sensible a las mayúsculas o minúsculas, es decir si usáramos hola con una mayúscula el patrón puede o no ser encontrado. Como segundo parámetro le estamos pasando a grep en el ejemplo un vector de 4 cadenas, entre ellas una que tiene la palabra hola que va en el segundo lugar de ese vector. Ahora si llamamos esta función nos regresa un número 2, eso significa que en el lugar 2 de ese vector de caracteres se encuentra la cadena o patrón que estábamos buscando. En este otro ejemplo utilizando una H mayúscula, este patrón no es encontrado en el vector de caracteres y por lo tanto nos regresa un vector de tamaño 0. Ahora la siguiente función que veremos es nchar, esta lo único que nos dice es el tamaño de el vector de caracteres que tengamos, si el vector tiene más de un elemento entonces nos regresa un vector numérico dándonos el tamaño de cada uno de los elementos, de las cadenas que conforman ese vector. La siguiente función paste concatena todas las cadenas que recibe como parámetros y nos regresa una única cadena. Por omisión estas cadenas son separadas con un espacio en blanco, pero podemos hacer cambiar el comportamiento de la función usando el parámetro sep, justamente como lo hacemos en el ejemplo. Sprintf es la siguiente función que veremos, esta ensambla una cadena y genera una nueva cadena formateada con los valores que vayamos pidiendo, por ejemplo, en este caso lo que tenemos es una variable llamada i que tiene un valor numérico que es 9, si quisiéramos conformar una cadena que nos diera la información sobre i, lo que podemos hacer es usar la función sprintf y pasarle en cada lugar donde vamos a utilizar el valor numérico, la cadena especial de %d, eso significa que es de una un valor decimal y luego cerramos esa cadena y utilizamos comas para poner los valores de las variables que queremos utilizar, en este caso es i y además su cuadrado por eso ponemos i, i cuadrada. La función substring lo que hace es extrae una subcadena de la cadena que le estemos pasando, los 2 parámetros que recibe después de la cadena a la cual vamos a extraer la subcadena es el Ãndice de inicio y de término de donde queremos que extraiga esta subcadena. Entonces podemos tener una frase que en este caso es R es muy útil y dependiendo de los valores de los 2 Ãndices de inicio y de final, la subcadena resultante será diferente en cada caso. Ahora la función strsplit lo que hace es subdivide una cadena en cadenas más pequeñas dependiendo de un caracter de separación. Lo que estamos viendo es que pasamos una cadena que dice esta es una cadena donde cada una de las palabras está separada por un guión y como segundo parámetro pasamos ese guión, entonces lo que nos va a regresar la función strsplit es cada uno de las palabras de esa cadena, pero quitándole el guión, porque you definimos que el guión es justamente la cadena divisoria. La siguiente función tiene su nombre regular expression, la cual es regexpr, esta función recibe un patrón o una expresión regular como primer parámetro y como segundo parámetro un texto o una cadena. Lo que hace esta función es nos regresa el Ãndice en donde encuentra la primera instancia del patrón o expresión regular que estamos buscando. está función tiene un comportamiento similar a la función anterior, solamente que en este caso al utilizar esta nueva función nos regresa los Ãndices donde son encontrados el patrón que estamos buscando. Es decir nos regresa los Ãndices donde encuentra la instancia inicial y subsecuentes instancias que son encontradas. Ahora sÃ, tenemos que explicar qué es una expresión regular. Las expresiones regulares o patrones no son más que una especie de comodÃn o un atajo para podernos referir a una gran cantidad de cadenas, por ejemplo, esta expresión se refiere a cualquier cadena que contenga a la letra b o a la letra v. En términos más formales una expresión regular o una regexpr, como se conoce en la jerga computacional, es una secuencia de caracteres que define una búsqueda de un patrón, principalmente para hacer coincidencia de patrones con cadenas de caracteres. Las expresiones regulares pueden ser muy ricas e incluso muy complicadas. El objetivo del curso no define que veamos a profundidad de estas pero podemos ver en particular cómo las utiliza R, haciendo una llamada a la función help de la palabra regexp. Aquà podemos ver todas las expresiones que nos sirven para utilizar expresiones regulares dentro del lenguaje con las funciones que you hemos visto. Además hay libros completos que te enseñan únicamente a utilizar expresiones regulares. Ahora veremos un par de ejemplos que podrÃan ser muy útiles para hacer uso de estas. Como you vimos en el ejemplo de la b o la v podemos usar los corchetes para hacer búsquedas de esas letras dentro de una cadena. Por ejemplo en este momentos estamos observando cómo podemos buscar algunas de las vocales y la primera función nos regresa el Ãndice en donde encuentra por primera vez una de esas vocales y la segunda función encuentra todos los Ãndices donde son encontradas algunas de esas vocales. En una expresión regular en R un punto nos indica un caracter simple, entonces cuando lo utilizamos dentro de una expresión regular lo que estamos indicando es que no importa qué caracter este ahÃ, cualquiera que se ponga valida esa expresión regular. En el ejemplo lo que estamos viendo es hacemos una búsqueda de la expresión regular a.i, esto nos está indicando que queremos buscar una cadena que empiece con a, que siga un cualquier caracter y luego el caracter i. Entonces nos indicará en cuál cadena va a encontrar ese tipo de patrón. En esta segunda parte lo que hacemos es cambiar el orden de cómo estamos buscando los caracteres la i y la a, y como se encuentra más de una vez nos da los Ãndices en donde esta cadena fue encontrada. Por ejemplo, ¿ahora qué pasarÃa si quisiéramos buscar un punto dentro de una cadena? En este caso lo que tenemos que hacer es escapar ese caracter, como el punto dentro de una expresión regular tiene un significado muy particular, entonces tenemos que escapar ese caracter utilizando la diagonal invertida, pero en este caso como la diagonal invertida también es un carácter especial tenemos que escaparla también, por eso utilizamos una doble diagonal invertida y luego el punto. Con esto estamos indicándole a R que esa expresión regular se está refiriendo a la búsqueda de un punto exactamente. [MÚSICA]