Suche…


Bemerkungen

Verwandte Dokumente:

Zeichenketten drucken und anzeigen

R verfügt über mehrere integrierte Funktionen, die zum Drucken oder Anzeigen von Informationen verwendet werden können, aber print und cat sind die grundlegendsten Funktionen. Da R eine interpretierte Sprache ist , können Sie diese direkt in der R-Konsole ausprobieren:

print("Hello World")
#[1] "Hello World"
cat("Hello World\n")
#Hello World

Beachten Sie den Unterschied in Eingang und Ausgang für die beiden Funktionen. (Hinweis: Der Wert von x keine Anführungszeichen, die mit x <- "Hello World" . Sie werden bei der Ausgabe durch print hinzugefügt.)

cat einen oder mehrere Zeichenvektoren als Argumente und gibt sie an die Konsole aus. Wenn der Zeichenvektor eine Länge von mehr als 1 hat, werden die Argumente standardmäßig durch ein Leerzeichen getrennt:

cat(c("hello", "world", "\n"))
#hello world

Ohne das neue Zeilenzeichen ( \n ) wäre die Ausgabe:

cat("Hello World")
#Hello World> 

Die Eingabeaufforderung für den nächsten Befehl erscheint unmittelbar nach der Ausgabe. (Einige Konsolen, wie die von RStudio, fügen automatisch eine Newline an Zeichenfolgen an, die nicht mit einer Newline enden.)

print ist ein Beispiel für eine "generische" Funktion. Dies bedeutet, dass die Klasse des ersten übergebenen Arguments erkannt wird und eine klassenspezifische Methode zur Ausgabe verwendet wird. Bei einem Zeichenvektor wie "Hello World" ist das Ergebnis ähnlich wie bei der Ausgabe von cat . Die Zeichenfolge wird jedoch in Anführungszeichen gesetzt und eine Zahl [1] ausgegeben, um das erste Element eines Zeichenvektors anzugeben (in diesem Fall das erste und einzige Element):

print("Hello World")
#[1] "Hello World"

Diese Standarddruckmethode sehen wir auch, wenn wir einfach R bitten, eine Variable zu drucken. Beachten Sie, dass die Ausgabe von s ist wie das Aufrufen von print(s) oder print("Hello World") :

s <- "Hello World"
s
#[1] "Hello World"

Oder auch ohne etwas zuzuordnen:

"Hello World"
#[1] "Hello World"

Wenn wir eine zweite Zeichenkette als zweites Element des Vektors hinzufügen (mit der Funktion c() , um die Elemente zusammen zu ketten), unterscheidet sich das Verhalten von print() deutlich von dem von cat :

print(c("Hello World", "Here I am."))
#[1] "Hello World" "Here I am."

Beachten Sie, dass die c() Funktion nicht String-Verkettung macht. (Man muss dazu paste verwenden.) R zeigt an, dass der Zeichenvektor zwei Elemente hat, indem er sie separat zitiert. Wenn wir einen Vektor haben, der lang genug ist, um mehrere Zeilen zu überspannen, druckt R den Index des Elements, beginnend mit jeder Zeile, so wie es [1] am Anfang der ersten Zeile steht.

c("Hello World", "Here I am!", "This next string is really long.")
#[1] "Hello World"                      "Here I am!"                      
#[3] "This next string is really long."

Das spezielle Verhalten von print hängt von der Klasse des Objekts ab, das an die Funktion übergeben wird.

Wenn wir print ein Objekt mit einer anderen Klasse aufrufen, z. B. "numerisch" oder "logisch", werden die Anführungszeichen in der Ausgabe weggelassen, um anzuzeigen, dass es sich um ein Objekt handelt, das keine Zeichenklasse ist:

print(1)
#[1] 1
print(TRUE)
#[1] TRUE

Factor-Objekte werden auf dieselbe Art und Weise wie Zeichenvariablen gedruckt, was häufig zu Mehrdeutigkeiten führt, wenn die Konsolenausgabe zum Anzeigen von Objekten in SO-Fragenkörpern verwendet wird. Es ist selten, cat oder print außer in einem interaktiven Kontext. Das explizite Aufrufen von print() ist besonders selten (es sei denn, Sie wollten die Darstellung der Anführungszeichen unterdrücken oder ein Objekt anzeigen, das von einer Funktion als invisible wird), da die Eingabe von foo an der Konsole eine Abkürzung für print(foo) . Die interaktive Konsole von R ist als REPL (Read-Eval-Print-Loop) bekannt. Die cat Funktion wird am besten für spezielle Zwecke (z. B. Schreiben der Ausgabe in eine offene Dateiverbindung) gespeichert. Manchmal wird es in Funktionen verwendet (bei denen Aufrufe von print() unterdrückt werden). Die Verwendung von cat() in einer Funktion zum Erzeugen von Ausgaben für die Konsole ist jedoch eine schlechte Praxis . Die bevorzugte Methode ist message() oder warning() für Zwischennachrichten. Sie verhalten sich ähnlich wie cat , können aber vom Endbenutzer optional unterdrückt werden. Das Endergebnis sollte einfach zurückgegeben werden, damit der Benutzer es ggf. speichern kann.

message("hello world")
#hello world
suppressMessages(message("hello world"))

Lesen oder Schreiben einer Dateiverbindung

Nicht immer haben wir die Freiheit, von einem lokalen Systempfad zu lesen oder in ihn zu schreiben. Wenn zum Beispiel R-Code-Streaming-Map-Reduce die Dateiverbindung lesen und beschreiben muss. Es kann auch andere Szenarien geben, in denen man über das lokale System hinausgeht. Mit dem Aufkommen von Cloud und Big Data wird dies immer häufiger. Eine Möglichkeit, dies zu tun, ist in logischer Reihenfolge.

Stellen Sie eine Dateiverbindung zum Lesen mit dem Befehl file() ("r" steht für den Lesemodus):

conn <- file("/path/example.data", "r") #when file is in local system
conn1 <- file("stdin", "r") #when just standard input/output for files are available

Da dies nur eine Dateiverbindung herstellt, können Sie die Daten von diesen Dateiverbindungen wie folgt lesen:

line <- readLines(conn, n=1, warn=FALSE)

Hier lesen wir die Daten von der Dateiverbindung conn Zeile für Zeile als n=1 . man kann den Wert von n (z. B. 10, 20 usw.) ändern, um Datenblöcke für ein schnelleres Lesen zu lesen (10 oder 20 Zeilen Block in einem Durchgang). Um die komplette Datei in einem Schritt zu lesen, setzen Sie n=-1 .

Nach der Datenverarbeitung oder Modellausführung; Sie können die Ergebnisse mit vielen verschiedenen Befehlen wie writeLines(),cat() usw. in die Dateiverbindung writeLines(),cat() die in eine Dateiverbindung schreiben können. Alle diese Befehle nutzen jedoch die zum Schreiben eingerichtete Dateiverbindung. Dies kann mit dem Befehl file() folgt durchgeführt werden:

conn2 <- file("/path/result.data", "w") #when file is in local system
conn3 <- file("stdout", "w") #when just standard input/output for files are available

Dann schreibe die Daten wie folgt:

writeLines("text",conn2, sep = "\n")

Erfassen Sie die Ausgabe des Betriebssystembefehls

Funktionen, die einen Zeichenvektor zurückgeben

Base R hat zwei Funktionen zum Aufrufen eines Systembefehls. Beide erfordern einen zusätzlichen Parameter, um die Ausgabe des Systembefehls zu erfassen.

system("top -a -b -n 1", intern = TRUE) 
system2("top", "-a -b -n 1", stdout = TRUE)

Beide geben einen Zeichenvektor zurück.

  [1] "top - 08:52:03 up 70 days, 15:09,  0 users,  load average: 0.00, 0.00, 0.00"     
  [2] "Tasks: 125 total,   1 running, 124 sleeping,   0 stopped,   0 zombie"            
  [3] "Cpu(s):  0.9%us,  0.3%sy,  0.0%ni, 98.7%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st"  
  [4] "Mem:  12194312k total,  3613292k used,  8581020k free,   216940k buffers"        
  [5] "Swap: 12582908k total,  2334156k used, 10248752k free,  1682340k cached"         
  [6] ""                                                                                
  [7] "  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            "
  [8] "11300 root      20   0 1278m 375m 3696 S  0.0  3.2 124:40.92 trala              "
  [9] " 6093 user1     20   0 1817m 269m 1888 S  0.0  2.3  12:17.96 R                  "
 [10] " 4949 user2     20   0 1917m 214m 1888 S  0.0  1.8  11:16.73 R                  "

Zur Veranschaulichung wird der UNIX-Befehl top -a -b -n 1 verwendet. Dies ist betriebssystemspezifisch und muss möglicherweise geändert werden, um die Beispiele auf Ihrem Computer auszuführen.

Package devtools hat die Funktion, einen Systembefehl auszuführen und die Ausgabe ohne zusätzlichen Parameter zu erfassen. Es gibt auch einen Zeichenvektor zurück.

devtools::system_output("top", "-a -b -n 1") 

Funktionen, die einen Datenrahmen zurückgeben

Die Funktion fread im Paket data.table ermöglicht das Ausführen eines Shell-Befehls und das Lesen der Ausgabe wie bei read.table . Es gibt eine data.table oder einen data.frame .

fread("top -a -b -n 1", check.names = TRUE)
       PID     USER PR NI  VIRT  RES  SHR S X.CPU X.MEM     TIME.         COMMAND
  1: 11300     root 20  0 1278m 375m 3696 S     0   3.2 124:40.92           trala
  2:  6093    user1 20  0 1817m 269m 1888 S     0   2.3  12:18.56               R
  3:  4949    user2 20  0 1917m 214m 1888 S     0   1.8  11:17.33               R
  4:  7922    user3 20  0 3094m 131m 1892 S     0   1.1  21:04.95               R

Beachten Sie, dass fread die oberen 6 Kopfzeilen automatisch übersprungen hat.

Hier wurde der Parameter check.names = TRUE hinzugefügt, um %CPU , %MEN und TIME+ in syntaktisch gültige Spaltennamen zu konvertieren.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow