Drucken Sie den Inhalt von Zeichenfolgen und Variablen in derselben Zeile in R.

198

Gibt es eine Möglichkeit, Text und variablen Inhalt in derselben Zeile zu drucken? Beispielsweise,

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

Ich konnte nichts an der Syntax finden, was mir dies erlauben würde.


quelle

Antworten:

299

Sie können pastemit verwendenprint

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

oder cat

cat("Current working dir: ", wd)
Agstudy
quelle
8
Sie möchten wahrscheinlich sep = ''oder Sie erhalten einen zusätzlichen Platz.
Hadley
8
Mit cat()bekomme ich eine NULLam Ende :(
ragesz
5
@ Ragesz Ich bekomme nur null am Ende, wenn Sie die Katze in einen Druck wie setzen: print(cat("test", var)) was sein solltecat("test", var)
Spidfire
62

{glue} bietet eine viel bessere String-Interpolation, siehe meine andere Antwort . Auch, wie Dainis zu Recht erwähnt, sprintf()ist dies nicht ohne Probleme.

Es gibt auch sprintf():

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

Verwenden Sie zum Drucken auf der Konsolenausgabe cat()oder message():

cat(sprintf("Current working dir: %s\n", wd))
message(sprintf("Current working dir: %s\n", wd))
krlmlr
quelle
Eine weitere schöne Option! Dies ist anderen Skriptsprachen sehr ähnlich und sehr praktisch, wenn Sie einen Text haben, in dem Sie mehrere Variablen implementieren möchten. Vielen Dank!
1
bei weitem die bequemste Option, insbesondere wenn Sie ein Funktionsargument verfassen. Mit Paste wird es schnell zu einem unlesbaren Durcheinander.
user27636
2
Beachten Sie, dass sprintfnicht gedruckt wird, sondern nur die Zeichenfolge formatiert wird. In Skripten ist so etwas wie print (sprintf (...)) erforderlich.
CHS
22

Oder mit message

message("Current working dir: ", wd)

Die Antwort von @ agstudy ist hier besser geeignet

Jilber Urbina
quelle
17

Der einfachste Weg, dies zu tun, ist zu verwenden paste()

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

paste0() würde zu folgendem Ergebnis führen:

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

Beachten Sie, dass zwischen der Zeichenfolge und x kein Standardtrennzeichen steht. Die Verwendung eines Leerzeichens am Ende der Zeichenfolge ist eine schnelle Lösung:

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

Kombinieren Sie dann eine der beiden Funktionen mit print()

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

Oder

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

Wie andere Benutzer angegeben haben, können Sie auch verwenden cat()

user1526693
quelle
14

Das {glue} -Paket bietet String-Interpolation. Im Beispiel {wd}wird durch den Inhalt der Variablen ersetzt. Komplexe Ausdrücke werden ebenfalls unterstützt.

library(glue)

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

Erstellt am 13.05.2019 durch das reprex-Paket (v0.2.1)

Beachten Sie, dass die gedruckte Ausgabe keine [1]Artefakte und "Anführungszeichen enthält, für die andere Antworten verwendet werden cat().

krlmlr
quelle
8

Wie andere Benutzer sagten, ist cat () wahrscheinlich die beste Option.

@krlmlr schlug die Verwendung von sprintf () vor und es ist derzeit die drittplatzierte Antwort. sprintf () ist keine gute Idee. Aus der R-Dokumentation:

Die Formatzeichenfolge wird an die Sprintf-Funktion des Betriebssystems übergeben, und falsche Formate können dazu führen, dass letztere den R-Prozess zum Absturz bringen.

Es gibt keinen guten Grund, sprintf () anstelle von cat oder anderen Optionen zu verwenden.

Dainis Boumber
quelle
2

Sie können die Methode paste0 oder cat verwenden, um Zeichenfolgen mit variablen Werten in R zu kombinieren

Beispielsweise:

paste0("Value of A : ", a)

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