11.4 Exportar datos

Un paso muy importante en el trabajo con R es exportar los datos que hemos generado, ya sea para que sean usados por otras personas o para almacenar información en nuestro disco duro en lugar de nuestro RAM.

Dependiendo del tipo de estructura de dato en el que se encuentran contenidos nuestros datos son las opciones que tenemos para exportarlos.

11.4.1 Data frames y matrices

Si nuestros datos se encuentran contenidos en una estructura de datos rectangular, podemos exportarlos con diferentes funciones.

De manera análoga a read.table(), la función write.table() nos permite exportar matrices o data frames, como archivos de texto con distintas extensiones.

Los argumentos más usados de write.table() son los siguientes.

  • x: El nombre del data frame o matriz a exportar.
  • file: El nombre, extensión y ruta del archivo creado con esta función. Si sólo escribimos el nombre del archivo, este será creado en nuestro directorio de trabajo.
  • sep: El carácter que se usará como separador de columnas.
  • row.names: Si deseamos incluir el nombre de los renglones en nuestro objeto al exportarlo, establecemos este argumento como TRUE. En general, es recomendable fijarlo como FALSE, para conservar una estructura tabular más fácil de leer.
  • col.names: Si deseamos que el archivo incluya los nombres de las columnas en nuestro objeto, establecemos este argumento como TRUE. Es recomendable fijarlo como TRUE para evitar la necesidad de almacenar los nombres de columna en documentos distintos.

Puedes consultar todos los argumentos de esta función ejecutando ?write.table.

Probemos exportando el objeto iris a un documento de texto llamado iris.txt a nuestro directorio de trabajo, usando como separador la coma, con nombres de columnas y sin nombre de renglones.

write.table(x = iris, file = "iris.txt", sep = ",", 
            row.names = FALSE, col.names = TRUE)

Importemos el archivo que hemos creado usando read.table().

iris_txt <- read.table(file = "iris.txt", header = TRUE, sep = ",")

# Resultado
head(iris_txt)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

También podemos exportar datos a archivos con extensión .csv con la función write.csv().

Vamos a exportar iris como un documento .csv. En este caso, sólo especificamos que no deseamos guardar los nombres de los renglones con row.names = FALSE.

write.csv(x = iris, file = "iris.csv", row.names = FALSE) 

Importamos el archivo creado.

iris_csv <- read.csv("iris.csv")

# Resultado
head(iris_csv)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

11.4.2 Listas

La manera más sencilla de exportar listas es guardarlas en archivos RDS. Este es un tipo de archivo nativo de R que puede almacenar cualquier objeto a un archivo en nuestro disco duro.

Además, RDS comprime los datos que almacena, por lo que ocupa menos espacio en disco duro que otros tipos de archivos, aunque contengan la misma información.

Para exportar un objeto a un archivo RDS, usamos la función saveRDS() que siempre nos pide dos argumentos:

  • object: El nombre del objeto a exportar.
  • file: El nombre y ruta del archivo que crearemos. Los archivos deben tener la extensión .rds. Si no especificamos una ruta completa, el archivo será creado en nuestro directorio de trabajo.

Creamos una lista de ejemplo que contiene dos vectores y dos matrices

mi_lista <- list("a" = c(TRUE, FALSE, TRUE),
     "b" = c("a", "b", "c"),
     "c" = matrix(1:4, ncol = 2),
     "d" = matrix(1:6, ncol = 3))


# Resultado
mi_lista
## $a
## [1]  TRUE FALSE  TRUE
## 
## $b
## [1] "a" "b" "c"
## 
## $c
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## $d
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6

Aunque podemos intentar write.table() para exportar listas, por lo general obtendremos un error como resultado.

Tratamos de exportar la lista anterior como un archivo .txt.

write.table(x = mi_lista, file = "mi_lista.txt")
## Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments imply differing number of rows: 3, 2

Usamos la función saveRDS() para exportar al archivo mi_lista.rds.

saveRDS(object = mi_lista, file = "mi_lista.rds")

Si deseamos importar un archivo RDS a R, usamos la función readRDS(), indicando la ruta en la que se encuentra el archivo que deseamos.

Intentemos importar el archivo mi_lista.rds.

mi_lista_importado <- readRDS(file = "mi_lista.rds")

Vamos el resultado.

mi_lista_importado
## $a
## [1]  TRUE FALSE  TRUE
## 
## $b
## [1] "a" "b" "c"
## 
## $c
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## $d
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
# El resultado es una lista, al igual que el objeto original
class(mi_lista)
## [1] "list"

Los objetos importados usando un archivo RDS conservan los tipos y clases que tenían originalmente, lo cual previene pérdida de información.