Imprima cadenas y contenidos variables en la misma línea en R

198

¿Hay alguna forma de imprimir texto y contenido variable en la misma línea? Por ejemplo,

wd <- getwd()
print("Current working dir: ", wd)

No pude encontrar nada sobre la sintaxis que me permitiera hacer esto.


fuente

Respuestas:

299

Puedes usar pasteconprint

print(paste0("Current working dir: ", wd))

o cat

cat("Current working dir: ", wd)
estudio
fuente
8
Probablemente quieras sep = ''o obtendrás un espacio extra.
Hadley
8
Usando cat()obtengo un NULLal final :(
ragesz
55
@ragesz Solo me pongo nulo al final si pones al gato dentro de una impresión como: print(cat("test", var)) que debería sercat("test", var)
Spidfire
62

{glue} ofrece una interpolación de cadenas mucho mejor, mira mi otra respuesta . Además, como Dainis menciona con razón, sprintf()no está exento de problemas.

También hay sprintf():

sprintf("Current working dir: %s", wd)

Para imprimir en la salida de la consola, use cat()o message():

cat(sprintf("Current working dir: %s\n", wd))
message(sprintf("Current working dir: %s\n", wd))
krlmlr
fuente
Otra buena opción! Esto es muy similar a otros lenguajes de secuencias de comandos y muy conveniente si tiene un texto en el que desea implementar múltiples variables. ¡Gracias!
1
Con mucho, la opción más conveniente, especialmente si está componiendo un argumento de función. con pegar se convierte rápidamente en un lío ilegible.
user27636
2
Tenga en cuenta que sprintfno se imprime, solo formatea la cadena. Algo como print (sprintf (...)) es necesario dentro de los scripts.
CHS
22

O usando message

message("Current working dir: ", wd)

La respuesta de @agstudy es la más adecuada aquí

Jilber Urbina
fuente
17

La forma más fácil de hacer esto es usar paste()

> paste("Today is", date())
[1] "Today is Sat Feb 21 15:25:18 2015"

paste0() daría como resultado lo siguiente:

> paste0("Today is", date())
[1] "Today isSat Feb 21 15:30:46 2015"

Observe que no hay separador predeterminado entre la cadena y x. Usar un espacio al final de la cadena es una solución rápida:

> paste0("Today is ", date())
[1] "Today is Sat Feb 21 15:32:17 2015"

Luego combine cualquiera de las funciones con print()

> print(paste("This is", date()))
[1] "This is Sat Feb 21 15:34:23 2015"

O

> print(paste0("This is ", date()))
[1] "This is Sat Feb 21 15:34:56 2015"

Como han dicho otros usuarios, también puedes usar cat()

user1526693
fuente
14

El paquete {glue} ofrece interpolación de cadenas. En el ejemplo, {wd}se sustituye con el contenido de la variable. Las expresiones complejas también son compatibles.

library(glue)

wd <- getwd()
glue("Current working dir: {wd}")
#> Current working dir: /tmp/RtmpteMv88/reprex46156826ee8c

Creado el 13/05/2019 por el paquete reprex (v0.2.1)

Observe cómo la salida impresa no contiene los [1]artefactos y las "comillas, para lo cual se utilizan otras respuestas cat().

revs krlmlr
fuente
8

Como dijeron otros usuarios, cat () es probablemente la mejor opción.

@krlmlr sugirió usar sprintf () y actualmente es la tercera respuesta clasificada. sprintf () no es una buena idea. De la documentación de R:

La cadena de formato se pasa por la función sprintf del sistema operativo, y los formatos incorrectos pueden hacer que este último bloquee el proceso R.

No hay una buena razón para usar sprintf () sobre cat u otras opciones.

Dainis Boumber
fuente
2

puede usar el método paste0 o cat para combinar una cadena con valores variables en R

Por ejemplo:

paste0("Value of A : ", a)

cat("Value of A : ", a)
Codemaker
fuente