Stampa stringhe e contenuti variabili sulla stessa riga in R


199

Esiste un modo per stampare testo e contenuti variabili sulla stessa riga? Per esempio,

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

Non sono riuscito a trovare nulla sulla sintassi che mi permettesse di farlo.

r  printing 

Risposte:


301

Puoi usarlo pasteconprint

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

o cat

cat("Current working dir: ", wd)

8
Probabilmente vuoi sep = ''o avrai uno spazio extra.
Hadley,

8
Usando cat()ottengo un NULLalla fine :(
ragesz

5
@ragesz ottengo null alla fine solo se metti il ​​gatto all'interno di una stampa come: print(cat("test", var)) quale dovrebbe esserecat("test", var)
Spidfire

62

{colla} offre una migliore interpolazione delle stringhe, vedi la mia altra risposta . Inoltre, come giustamente afferma Dainis, sprintf()non è privo di problemi.

C'è anche sprintf():

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

Per stampare sull'output della console, utilizzare cat()o message():

cat(sprintf("Current working dir: %s\n", wd))
message(sprintf("Current working dir: %s\n", wd))

Un'altra bella opzione! Questo è molto simile ad altri linguaggi di scripting e molto conveniente se si dispone di un testo in cui si desidera implementare più variabili. Grazie!

1
di gran lunga l'opzione più conveniente, specialmente se stai componendo un argomento di funzione. con incolla diventa rapidamente un pasticcio illeggibile.
user27636,

2
Nota che sprintfnon stampa, ma semplicemente formatta la stringa. Qualcosa come print (sprintf (...)) è necessario all'interno degli script.
CHS,

22

O usando message

message("Current working dir: ", wd)

La risposta di @ agstudy è la più adatta qui


17

Il modo più semplice per farlo è usare paste()

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

paste0() comporterebbe quanto segue:

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

Si noti che non esiste un separatore predefinito tra la stringa e x. L'uso di uno spazio alla fine della stringa è una soluzione rapida:

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

Quindi combinare entrambe le funzioni 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"

Come altri utenti hanno affermato, è possibile utilizzare anche cat()


14

Il pacchetto {colla} offre interpolazione di stringhe. Nell'esempio, {wd}viene sostituito con il contenuto della variabile. Sono supportate anche espressioni complesse.

library(glue)

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

Creato il 13/05/2019 dal pacchetto reprex (v0.2.1)

Nota come l'output stampato non contiene gli [1]artefatti e le "virgolette, per le quali utilizzano altre risposte cat().


8

Come altri utenti hanno detto, cat () è probabilmente l'opzione migliore.

@krlmlr ha suggerito di usare sprintf () ed è attualmente la terza risposta classificata. sprintf () non è una buona idea. Dalla documentazione R:

La stringa di formato viene trasmessa alla funzione sprintf del sistema operativo e formati errati possono causare il blocco del processo R da parte di quest'ultimo.

Non ci sono buoni motivi per usare sprintf () su cat o altre opzioni.


2

puoi usare il metodo paste0 o cat per combinare stringa con valori variabili in R

Per esempio:

paste0("Value of A : ", a)

cat("Value of A : ", a)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.