[MUSIC] Otra característica que pueden tener los objetos en R son los atributos. Estos pueden ser de diferentes tipos. Pueden ser nombres, dimensiones, clase, el tamaño, o incluso algunos atributos definidos por el usuario. Estos se pueden acceder, o puedes ver qué atributos tiene un objeto utilizando la función attributes(). Y poniendo entre paréntesis el nombre del objeto. Ahora vamos a hablar un poco de la entrada en R, en la línea de comandos de R. En esta podemos escribir expresiones como si fuera una calculadora, esto you lo hemos dicho. Pero es importante algo nuevo que vamos a ver, es que el símbolo <- es un símbolo de asignación. Aquí es justo como se pueden generar las variables u objetos de los que you hemos hablado. la gramática del lenguaje determina si una expresión está completa o no. Y solo podemos saber si esta fue correcta una vez que hemos presionado Enter. Finalmente, es importante que sepamos que con el símbolo de gato podemos hacer comentarios al código que estuviéramos escribiendo. you dijimos que cuando escribimos una expresión en la línea de comandos y presionamos Enter, esta se evalúa y el resultado no se regresaba. En este ejemplo que estamos viendo en pantalla, el [1] nos está indicando el tamaño del vector que estamos mandando a llamar. Es de tamaño 1, por lo que podemos ver que el 9 es el primer elemento de ese vector, que es el único que existe en él. En este caso por ejemplo, tenemos que x se le fue asignado un valor del 1 al 100. O sea, se genera un vector de tamaño 100, donde cada uno de ellos van incrementándose de uno en uno. El símbolo dos puntos, indica que lo que queremos es una secuencia del 1 al 100. Utilizamos la función c() para generar vectores. Lo que va haciendo c(), es ir concatenando todos los elementos que va encontrando dentro de los paréntesis. También podemos usar la función vector() para crear vectores. Esto lo habíamos dicho anteriormente, pero no habíamos visto cómo funciona. Podemos ver en la pantalla que podemos crear vectores numéricos, lógicos, de caracteres, enteros y complejos. En este caso, como podemos darnos cuenta, cada uno de los elementos cuando estamos creando estos vectores, son iguales, del mismo tipo. Cuando utilizamos la función vector(), tenemos que decir qué tipo de vector va a ser, el tipo de dato que va a contener y el tamaño. Si no especificamos explícitamente los elementos, lo que hará es rellenar de ceros ese vector. Te preguntarás probablemente qué pasa si combinas dos tipos distintos utilizando la función c(). Lo que sucede aquí es que no se genera un error, sino se lleva a cabo un tipo de operación conocida como coerción. En donde se busca un tipo común, y los elementos que no son de ese tipo son convertidos a él para poder generar un vector. Recordemos que el vector tiene elementos todos del mismo tipo. Por ejemplo, lo que estamos haciendo es utilizando la función c, asignar un par de valores o concatenarlos al vector y. El primer elemento que estamos tratando de concatenar es el valor numérico 1.7, el segundo es el caracter a. Como a en R no puede ser convertido a un valor numérico, entonces el 1.7, el valor numérico 1.7, es convertido al caracter 1.7. Que no es más que la representación en caracter del valor 1.7. La coerción tiene reglas muy particulares. Vamos a experimentar un poco en la práctica, para ver cómo son esas reglas. Una vez que llevemos a cabo, entendamos más bien esas reglas, vamos a ver que estas se hacen de manera explícita. Es decir, nosotros no decimos qué tipo estamos esperando. Hay una manera de hacerlo explícitamente, que se llama justamente coerción explícita. Donde utilizamos las funciones as, que nos convierten de un tipo a otro. El nombre de estas funciones son, as.numeric(), as.logical(), as.character(), as.integer(). Y como su nombre lo indica lo que hacen es convertir lo que le estás poniendo de entrada, a el tipo que tiene en la segunda parte de su nombre. En este ejemplo, el vector x es un vector que cuenta los valores del 0 al 10, con incrementos de uno en uno. Si observamos utilizando la función class, la clase a la que pertenece x, podemos ver que es de tipo entero. Ahora podemos crear cuatro vectores más, llamados a, b, c y d. Donde a cada uno vamos haciendo una coerción explícita como numérico, como lógico, como caracter y como entero. Entonces si ahora observamos el tipo de cada una de ellas, vamos a observar que justamente lo que queríamos. Uno es numérico, otro es lógico, otro es de caracter y el otro es entero. Pudiera suceder que quisiéramos intentar coaccionar un vector a un tipo donde puede resultar algo que no tiene sentido. Por ejemplo, ¿qué pasaría si intentamos coaccionar caracteres de letras a un vector de tipo lógico? Lo que nos va a suceder en este caso muy particular. Es que estos caracteres como no pueden ser interpretados como valores verdadero o falso, true or false. Lo que hará es generarnos valores NAs. NA es un tipo muy particular que significa Not Available. Es decir, es un valor faltante. [MUSIC]