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.
  • logiTRUE o FALSE.
  • 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.