Práctica de la Unidad 6
Ejercicio 1
Crear un paquete de R llamado paridad que contenga dos funciones: numeros_pares() y numeros_impares(). Cada una de ellas toma un vector de números x y devuelve un nuevo vector que contiene sólo los números pares o impares, según corresponda. A continuación se presentan ejemplos del comportamiento esperado de las funciones:
> library(paridad)
> numeros_pares(c(-1, 4, 4.1, 0, 6))
[1] 4 0 6
> numeros_pares(10:15)
[1] 10 12 14
> numeros_pares(1)
numeric(0)
> numeros_pares(c("hola", "chau"))
Error in numeros_pares(c("hola", "chau")) :
x debe ser un vector numérico.
> numeros_impares(c(-1, 4, 4.1, 0, 6))
[1] -1
> numeros_impares(10:15)
[1] 11 13 15
> numeros_impares(-2)
numeric(0)
> numeros_impares(c("hola", "chau"))
Error in numeros_impares(c("hola", "chau")) :
x debe ser un vector numérico.Se pueden seguir estos pasos a modo de guía:
- Abrir RStudio y ejecutar
library(devtools)en la terminal. - Generar el paquete
paridadhaciendo uso de la funcióncreate_package(). Especificar adecuadamente el directorio donde estará ubicado el paquete. - Continuar trabajando en el proyecto de RStudio creado en el paso anterior, que se ha abierto automáticamente en una nueva sesión de RStudio. En esta sesión, cargar el paquete
devtools. - Utilizar la función
use_r()para agregar automáticamente un archivo.Ren la carpetaR/del paquete. - Escribir en dicho script el código
numeros_pares()ynumeros_impares(). - Cargar todo el contenido del paquete desarrollado utilizando
load_all()y verificar el correcto funcionamiento de las funciones. - Documentar las funciones usando el sistema
roxygeny generar la documentación condocument(). - Completar los campos básicos del archivo
DESCRIPTION. - Instalar localmente el paquete con
install(). - Generar un archivo comprimido para distribuir el paquete con
build(). - Cerrar la sesión de RStudio, abrir una nueva, cargar el paquete con
library(), probar las funciones y verificar que las páginas de ayuda se vean bien.
Ejercicio 2
Crear un nuevo paquete de R llamado palabrerio. que cuente con dos funciones:
termina_en_vocal(palabra): recibe una cadena de texto y devuelveTRUEsi la última letra es una vocal (a, e, i, o, u). Para convertir una palabra en un vector de letras se pueden usar la función de R Basestrsplit(). Esta función es de uso interno del paquete, no debe ser exportada para los usuarios.filtrar_por_vocal(palabras): recibe un vector de palabras y usa la funcióntermina_en_vocal()para devolver un vector que contiene sólo aquellas que terminan en vocal.
Ejemplo del uso del paquete:
> library(palabrerio)
> x <- c("casa", "flor", "pared", "día", "sol")
> filtrar_por_vocal(x)
[1] "casa" "día"
> filtrar_por_vocal(c("montes", "cuadernos"))
character(0)
> filtrar_por_vocal(1:3)
Error in filtrar_por_vocal(1:3) : palabras debe ser un vector carácter.Ejercicio 3
Crear un nuevo paquete llamado unidad3 para guardar allí al menos 4 de las funciones creadas en los ejercicios de la Práctica 3.
Ejercicio 4
Hoy en día, casi todas las plataformas digitales —redes sociales, correos electrónicos, tiendas online y homebanking, entre otras— requieren que los usuarios se registren mediante un nombre de usuario y una contraseña. Para mantener la seguridad de nuestras cuentas, es fundamental utilizar contraseñas seguras y diferentes en cada sitio, evitando así que la filtración de una de ellas comprometa las demás. Sin embargo, muchas personas tienden a usar contraseñas simples o repetidas, lo que aumenta el riesgo de ser víctimas de ataques informáticos. Una buena práctica es generar contraseñas personalizadas que resulten fáciles de recordar para el usuario, pero difíciles de adivinar para otros.
En este ejercicio vamos a crear una función en R que le ayude a las personas a elegir una contraseña, siguiendo una regla determinada a partir de la información provista por el usuario, y distribuirla mediante la creación de un paquete. Si bien puede ser una muy buena estrategia que cada persona invente para sí mismo una regla para generar contraseñas fáciles de recordar, probablemente no sea lo más seguro utilizar una regla propuesta por un tercero, como se propone en esta tarea. No obstante, será una buena oportunidad para seguir aprendiendo.
- El paquete se llama
seguridad. - La función que exporta el paquete debe llamarse
generar_clave()y debe tener tres argumentos de entrada: un número de dos dígitos, un nombre y un apellido. - El número de dos dígitos no debe tener un valor asignado por defecto.
- Los valores por defecto para los otros dos argumentos deben ser el primer nombre y el apellido del estudiante.
- La función tiene que generar un nombre de usuario a partir del nombre y apellido provistos. Por ejemplo, si el nombre es “Silvina” y el apellido es “Perez”, el nombre de usuario a crear debe ser “silvina_perez”.
- La contraseña sugerida por la función debe estar formada por las 3 primeras letras del apellido, seguidas por los dígitos que resultan de la multiplicación entre la cantidad de vocales del nombre y la cantidad de consonantes del apellido, luego por las primeras 2 letras del nombre y finalmente por los dígitos que resulten de la multiplicación entre el número ingresado por el usuario y un número elegido por la función al azar entre el 1 y el 10
- Por ejemplo, si el nombre es “Silvina” (3 vocales), el apellido es “Perez” (3 consonantes), el dígito elegido es 32 y el número aleatorio resulta ser 4, la contraseña sugerida debe ser: “per9si128”.
- Tanto el nombre de usuario como la contraseña sugeridas deben ser letras minúsculas, sin importar lo que ingrese el usuario.
- La función debe imprimir un mensaje similar al siguiente
¡La contraseña se ha generado correctamente!y devolver una lista con el nombre de usario y la contraseña. - Pueden emplear los principios de la descomposición algorítmica y crear otras funciones auxiliares si lo consideran necesario, pero la función
generar_clave()debe ser la única que exporte el paquete. - Una vez finalizado, se debe encapsular el paquete en un archivo comprimido de formato
.tar.gz, que se crea automáticamente ejecutando la funciónbuild().