La función str() en R: ver la estructura de tus datos
str() viene de structure y te dice qué tienes entre manos: cuántas filas, cuántas columnas y de qué tipo es cada una. Junto con head(), es lo primero que se ejecuta al cargar unos datos.
Ejemplo simple
str(iris)
Devuelve algo así:
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 ...
$ Species : Factor w/ 3 levels "setosa",..: 1 1 1 1 1 ...
Se lee de un vistazo: es un data frame de 150 filas y 5 columnas, Sepal.Length es numérica y Species es un factor con 3 niveles. Además te enseña los primeros valores de cada una.
Los tipos que vas a ver
num→ numérico con decimales.int→ entero.chr→ texto.Factor→ categórico, con un número fijo de niveles.logi→TRUEoFALSE.Date→ fecha.
Para qué sirve de verdad: cazar errores de importación
Este es el uso real. Cargas un CSV, todo parece bien… y no lo está:
datos <- read.csv("ventas.csv")
str(datos)
Si una columna de importes aparece como chr en vez de num, tienes un problema → normalmente la coma decimal, que R ha leído como texto. Vuelve a importar con dec = ",".
Si una fecha aparece como chr, hay que convertirla:
datos$fecha <- as.Date(datos$fecha, format = "%d/%m/%Y")
Detectar esto antes de analizar te ahorra perseguir resultados absurdos más adelante. Un mean() sobre una columna de texto no falla siempre de forma evidente: a veces te devuelve NA y sigues adelante sin enterarte.
Ejemplo algo más completo
str() también funciona con listas y con objetos complejos, y ahí es donde se aprecia:
modelo <- lm(Petal.Length ~ Sepal.Length, data = iris)
str(modelo, max.level = 1)
Ese max.level = 1 es importante: sin él, str() te vuelca toda la estructura interna del modelo y llena la pantalla. Con él ves solo el primer nivel → los componentes que tiene el objeto, sin el detalle de cada uno.
Combinado con lo demás, la rutina de reconocimiento queda así:
dim(datos) # tamaño
str(datos) # tipos
head(datos) # aspecto
colSums(is.na(datos)) # ausentes por columna
Cuatro líneas antes de tocar nada. Es la costumbre que más disgustos evita.