Objetos
Todo el código R manipula objetos. El objeto, es el concepto principal sobre el cual se fundamenta la tecnología orientada a objetos. Un objeto puede ser visto como una entidad que posee atributos y efectúa acciones. Ejemplos de objetos en R incluyen las funciones, symbols (nombre objetos) e incluso las expresiones. A continuación se muestran algunos ejemplos de objetos:
# Una función es un objeto
function() {
x <- 1
y <- 2
x + y
}
## function() {
## x <- 1
## y <- 2
## x + y
## }
## <environment: 0x00000000241a0b28>
# también su nombre (symbol)
f <- function(x, y) {
x + y
}
f(1, 2)
## [1] 3
# incluso las expresiones
{
x <- 1
y <- 2
x + y
}
## [1] 3
Symbols
Formalmente, los nombres de las variables en R se designan como symbol. Cuando realizamos una asignación de un objeto al nombre de una variable, estamos en realidad asignando el objeto a un symbol. Por ejemplo, la instrucción:
x <- 1
asigna el symbol "x" al objeto "1" en el entorno actual.
Cada Objeto es Miembro de una Clase
Todos los objetos en R tienen una clase, la cual define que información contiene y como usarlo. Por ejemplo, la mayoría de números son numeric (lo veremos en la siguiente sección), y los valores lógicos pertenecen a la clase logical. En particular, puesto que R no dispone de un tipo para representar escalares, los vectores de números son numeric y los vectores de valores lógicos son logical. El tipo de dato "más pequeño" en R es un vector.
Podemos encontrar la clase de un objeto mediante la función class(objeto)
:
vector_numerico <- c(1, 2, 3, 4, 5)
class(vector_numerico)
## [1] "numeric"
Cada Objeto tiene un Tipo
Cada objeto en R tiene un tipo. El tipo define como es almacenado el objeto en R.
Podemos conocer el tipo de objeto con la función typeof(objeto)
:
vector_numerico <- c(1, 2, 3, 4, 5)
typeof(vector_numerico)
## [1] "double"
Comprobar la Clase de un Objeto en scripts
El uso de la función class()
es útil para examinar nuestros objetos en un trabajo interactivo con la consola de R, pero si necesitamos comprobar el tipo de un objeto en nuestros scripts, es mejor el uso de la función is()
. En una situación típica, nuestro test se parecerá al siguiente:
if (!is(x, "alguna_clase")) {
# alguna acción correctiva
}
La mayoría de las clases tienen su propia función is.*()
, utilizar esta función es mas efectivo que el uso de la función general is()
. Por ejemplo:
is.character("Ciencia de Datos con R")
## [1] TRUE
Podemos ver una lista completa de las funciones is()
en el paquete base
mediante la siguiente instrucción:
ls(pattern = "^is", baseenv())
Nombres de los Objetos
Los nombres de los objetos pueden contener letras, números, puntos y guiones bajos, pero no pueden empezar con un número o un punto seguido de un número. Además, no podemos hacer uso de las palabras reservadas del lenguaje como if
y for
. La instrucción ?make.names
describe en detalle lo que está y no permitido.
En resumen, los nombres de nuestros objetos :
Pueden contener:
- letras
- números
- guión bajo (-)
- punto (.)
Deben empezar con una letra.
- No podemos utilizar las palabras reservadas del lenguaje.
Para la comunidad hispanohablante, cabe mencionar que para que nuestro código sea lo mas portable posible no debemos utilizar acentos y la letra "ñ", es decir, debemos limitarnos a los caracteres de la "a" a la "z" ( y de la"A" a la "Z").
Ejemplos:
- ruben
- RUBEN123
- las_variables_pueden_contener_guiones
- las.variables.pueden.contener.puntos
- Ruben_123.0
Convención para Nombres con Varias Palabras
Puesto que queremos que nuestros objetos tengan nombres descriptivos, necesitaremos una convención para objetos con múltiples palabras. Recomendamos usar el método snake_case dónde separamos las palabras en minúsculas con el guión bajo:
Ejemplos:
- yo_uso_snake_case
- otraGenteUsaCamelCase
- alguna.gente.usa.puntos
- Y_otra.Gente.RENUNICAconvención