Print en R

Introducción a R Conceptos básicos de R
Las funciones print(), sprintf(), cat() y noquote() en R

Puedes imprimir valores en R introduciendo una variable u objeto en la consola o utilizando las funciones print, sprintf y cat. En este tutorial aprenderás a imprimir valores en R en diferentes situaciones.

La función print

La función print imprime objetos en la consola de R. Esta función es realmente útil cuando quieres que el código imprima alguna variable, mensaje u objeto cuando se evalúa un código, cuando quieres imprimir algún resultado para depurar código o cuando quieres comprobar la iteración actual de un bucle for imprimiéndolo en la consola.

Por ejemplo, puedes introducir una cadena de texto en la función print para imprimir un mensaje en la consola.

# Imprimir un mensaje
print("Este es un mensaje de ejemplo")
[1] "Este es un mensaje de ejemplo"

También puedes imprimir variables y objetos y la función print utilizará el método correspondiente para imprimir cada tipo de objeto. Ten en cuenta que también puedes imprimir un objeto o variable escribiéndolo en la consola de R.

# Imprimir una variable
x <- sqrt(18)
print(x)

# Ten en cuenta que esto es equivalente a:
# x
[1] 4.242641

No obstante, la función print permite personalizar la salida. Por ejemplo, puedes utilizar el argumento digits para establecer el número de dígitos deseado.

# Print a variable
x <- sqrt(18)
print(x, digits = 3)
[1] 4.24

La función print puede utilizarse junto con las funciones paste o paste0. En el siguiente ejemplo estamos imprimiendo la iteración actual de un bucle for.

# Imprimir las iteraciones de un bucle
for(i in 1:5) {
  
  print(paste("Iteración:", i))
  
}
[1] "Iteración: 1"
[1] "Iteración: 2"
[1] "Iteración: 3"
[1] "Iteración: 4"
[1] "Iteración: 5"

Para imprimir una variable u objeto no es necesario utilizar print, ya que basta con escribir el nombre de la variable u objeto en la consola y pulsar intro para imprimirlo.

Puedes imprimir cadenas de texto, variables, tablas, data frames, listas, matrices y cualquier otro objeto con la función print.

Concatenar e imprimir con cat

La función cat concatena e imprime objetos sin comillas. Esta función difiere de print en muchos aspectos, ya que permite introducir varios objetos pero sólo se permiten vectores atómicos. Esta función también permite enviar valores a un fichero.

cat("Uno", "Dos", "Tres")
Uno Dos Tres

Ten en cuenta que por defecto la función separa los objetos con un espacio vacío, pero puedes personalizarlo especificando un nuevo separador con sep.

cat("Uno", "Dos", "Tres", sep = "-")
Uno-Dos-Tres

Si quieres que los objetos aparezcan en una nueva línea puedes utilizar "\n" como separador.

cat("Uno", "Dos", "Tres", sep = "\n")
Uno
Dos
Tres

Otra diferencia interesante sobre print y cat es cómo cada función maneja un "\n" dentro de la cadena a imprimir. Mientras que cat añade una nueva línea, la función print imprime el resultado “tal cual”.

cat("Uno\nDos")
print("Uno\nDos")
Uno
Dos

[1] "Uno\nDos"

También puedes utilizar la función cat junto con las funciones paste o paste0 para imprimir un único objeto.

# Variable
x <- "https://r-charts.com/"

# Print
cat(paste0("Encuentra tutoriales de R en ", x))
Encuentra tutoriales de R en https://r-charts.com/

Escribir en un fichero con sink

La función cat es útil para escribir archivos, ya que proporciona un argumento llamado file para especificar el archivo de salida deseado. También puede añadir valores al archivo especificado estableciendo append = TRUE.

# Escribimos en un fichero llamado archivo.csv
cat(paste0(1:5, "A"), file = "archivo.csv", sep = "\n")

# Agregamos nuevos valores a archivo.csv
cat(paste0(1:5, "B"), file = "archivo.csv", sep = "\n", append = TRUE)
1A
2A
3A
4A
5A
1B
2B
3B
4B
5B

Sin embargo, una alternativa es utilizar la función sink para crear un fichero y enviar todos los valores ese fichero. También tendrás que llamar a sink() para cerrar la conexión.

# Cremos un archivo
sink(file = "archivo.txt")

# Valor
x <- 3

cat(paste0("El valor es ", x), sep = "\n")
cat("Texto en una nueva línea")

# Cerramos la conexión
sink()
closeAllConnections()
El valor es 3
Texto en una nueva línea

Eliminar comillas con noquote

Por defecto, si imprimes caracteres, se mostrarán entre comillas, como en el ejemplo siguiente.

print("R CODER")
"R CODER"

Sin embargo, en R existe una función llamada noquote que elimina las comillas de la salida. Ten en cuenta que esta función es equivalente a print(x, quote = FALSE).

noquote("R CODER")

# Equivalente a:
# print("R CODER", quote = FALSE)
R CODER

La función sprintf

La función sprintf es una envoltura de la función del lenguaje C del mismo nombre. Devuelve una cadena formateada basada en las especificaciones de conversión (ver la tabla siguiente para más información). Para cadenas de texto se puede utilizar %s como se muestra en el siguiente ejemplo.

x <- "R CODER"

sprintf("El nombre de este sitio web es %s", x)
[1] "El nombre de este sitio web es R CODER"

También puedes añadir más variables a sprintf y cada valor se formateará en función de la especificación de conversión correspondiente.

x <- "Pedro"
y <- 25

sprintf("Su nombre es %s y tiene %d años", x, y)
"Su nombre es Pedro y tiene 25 años

Una de las conversiones más utilizadas es %f para especificar el número deseado de puntos decimales (6 por defecto). En el siguiente ejemplo estamos estableciendo dos puntos decimales al valor.

value <- 10

sprintf("Este es el valor con dos puntos decimales: %0.2f", value)
"Este es el valor con dos puntos decimales: 10.00"

La siguiente tabla resume las especificaciones de conversión disponibles en R y su significado.

Especificación de conversión Significado
%a Valor de doble precisión (minúsculas)
%A Valor de doble precisión (mayúsculas)
%d Valor entero
%i Valor entero
%f Valor de doble precisión, en “coma fija”
%e Valor de doble precisión, en “exponencial”
%E Valor de doble precisión, en “exponencial”
%g Valor de doble precisión
%G Valor de doble precisión
%o Valor entero (octal)
%s Cadena de caracteres
%x Valor entero (hexadecimal)
%X Valor entero (hexadecimal)