[MÚSICA] [MÚSICA] En esta lección vamos a aprender cómo crear nuestra primera función en R, además aprenderemos el proceso que se lleva para poder llevar a cabo esta tarea. Escribir funciones es uno de los pilares de la programación estadística o de la programación en general, you que esto nos ayuda a esconder complejidad que muchas veces tiene que ser incluso repetitiva. Es decir nos facilita mucho la organización de nuestro código y además de nuestros propios análisis. Podríamos tratar de escribir una función en R desde la consola o como you lo hemos dicho prompt o línea de comandos, esto va a ser un poco complicado, lo mejor es utilizar el editor que nos permitirá luego poder escribir esta función o funciones en un archivo de texto y que podemos después recuperar usando la función source. Es fácil una vez que hayas creado una función, guárdala en un archivo y además crear todo un paquete para esa función o funciones que hayas creado. Esto te ayudará a que puedas organizar todo ese ambiente en un solo lugar y además tener acceso a la documentación de estas funciones. Este curso no llegara tan lejos, pero es importante que sepas que a partir de que tu puedas escribir tus propias funciones puedes empezar a buscar e intentar crear tu propio paquete. El primer paso que vamos a llevar a cabo, una vez abierto R Studio, es ir al menú de archivo o File y pedir que nos cree un nuevo script dentro de la sección new file o nuevo archivo. El siguiente paso es definir qué es lo que va a hacer nuestra función, a esto se le conoce como la especificación de la función o especificar la función. Esto lo único que hace es definir formalmente las capacidades de la función y su interacción con el usuario. En nuestro caso vamos a crear una función que reciba 2 números y lleve a cabo una operación con esos 2 números, estas operaciones van a ser la suma, la resta, la multiplicación y la división. El siguiente paso es entonces escribir nuestra función y una vez que hayamos visto que o pensemos que esté terminada, entonces lo que hacemos es seleccionarla con nuestro mouse y ejecutarla mandándola a ejecutar directamente con el mouse, en el botón de run o mandarla a ejecutar con command y enter o control y enter, si utilizas sistema Windows o Linux. Estamos viendo en pantalla la definición que yo he escrito, ustedes también podrían hacerlo, en este caso mi función se llama mi función y recibe como parámetros a x y y y un tercer parámetro llamado operación. La operación no es más que una cadena donde le indicamos qué operación va a llevar a cabo. Una vez en el cuerpo de la función utilizo una estructura de control if, para dependiendo del tipo de operación que vaya a llevar a cabo si en pareja con ese tipo se lleva a cabo esa operación. Ahora en pantalla estamos observando qué pasa si mando a llamar a mi función. Estoy llamando a mi función en una primera instancia utilizando los números 2 y 2, como no le paso el tercer parámetro entonces R supone que estoy mandando a llamar el valor por omisión, que es sumar. Es decir cuando pongo mi función 2, 2 me regresa el valor de 4. Ahora, ¿qué pasa si hago lo mismo, pero paso entre comillas la cadena suma? Hace exactamente lo mismo hace la suma y así sucesivamente con las demás operaciones. Ahora vamos a escribir una nueva función donde le pasemos un vector y una cota inferior y entonces esta función nos regresará todos los valores de ese vector que son mayores a la cota inferior que estamos especificando. Por ejemplo, yo definí la función de la siguiente manera, la función le llamo arriba de y recibe 2 parámetros el vector x y el limite inferior que vamos a utilizar. Entonces una vez en el cuerpo de la función genero un vector de valores lógicos, donde todos estos valores son todo los valores x que son mayores a limite. Una vez que tengo ese vector lógico utilizo una operación de subsetting utilizando corchetes y regreso el vector x utilizando ese vector lógico y eso me va a generar justamente lo que hemos pedido en la definición de la función. Una vez que nuestra función you esté dentro del ambiente de nuestra consola, podemos observar que al escribir la función, si intentamos utilizar la tecla tap dentro de los paréntesis, nos saldrá la lista de todos los parámetros que tenemos. Esto es muy bonito you que nos permite tener la lista completa de todos los parámetros podemos saber cuáles pueden ser usados y en el orden en el que deben ser usados. Podemos observar cómo al ejecutar nuestra función si solo la ejecutamos con un parámetro de entrada, esta nos mandará un error. Esto porque todos los parámetros necesitan estar presentes, porque ninguno de ellos está con valores por omisión. En el caso de que lo hagamos correctamente no tendremos ningún problema y nos regresará justamente lo que hemos pedido en la definición de ella. Regresando a la función que nombré mi función, podemos observar que podemos hacer algunas mejoras, ¿qué cambios haría? Una primera idea que se me ocurre es qué sucedería cuando paso como parámetro una operación que no esta definida en la lista DAVE que tengo. Sería bueno que si la operación que estamos introduciendo como parámetro no existe en esa lista, entonces mandemos un mensaje de error que sea claro para que el usuario pueda corregir esta. [MÚSICA]