R Language Stampa e visualizzazione di stringhe


Esempio

R ha diverse funzioni incorporate che possono essere utilizzate per stampare o visualizzare informazioni, ma print e cat sono le più elementari. Poiché R è un linguaggio interpretato , puoi provarli direttamente nella console R:

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

Notare la differenza di input e output per le due funzioni. (Nota: non ci sono caratteri di citazione nel valore di x creato con x <- "Hello World" . Sono aggiunti per print allo stadio di uscita.)

cat prende uno o più vettori di caratteri come argomenti e li stampa sulla console. Se il vettore di caratteri ha una lunghezza maggiore di 1, gli argomenti sono separati da uno spazio (per impostazione predefinita):

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

Senza il carattere di nuova riga ( \n ) l'output sarebbe:

cat("Hello World")
#Hello World> 

Il prompt per il comando successivo viene visualizzato immediatamente dopo l'output. (Alcune console come RStudio possono aggiungere automaticamente una nuova riga alle stringhe che non terminano con una nuova riga.)

print è un esempio di una funzione "generica", ovvero la classe del primo argomento passato viene rilevata e un metodo specifico della classe viene utilizzato per l'output. Per un vettore di caratteri come "Hello World" , il risultato è simile all'output di cat . Tuttavia, la stringa di caratteri viene citata e viene emesso un numero [1] per indicare il primo elemento di un vettore di caratteri (in questo caso, il primo e l'unico elemento):

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

Questo metodo di stampa predefinito è anche quello che vediamo quando chiediamo semplicemente a R di stampare una variabile. Nota come l'output della digitazione s equivale a chiamare le print(s) o print("Hello World") :

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

O anche senza assegnarlo a nulla:

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

Se aggiungiamo un'altra stringa di caratteri come un secondo elemento del vettore (usando la funzione c() per c oncatenare insieme gli elementi), allora il comportamento di print() sembra abbastanza diverso da quello di cat :

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

Si osservi che la c() funzione non fa stringa concatenazione. (Uno ha bisogno di usare paste per quello scopo.) R mostra che il vettore di caratteri ha due elementi citandoli separatamente. Se abbiamo un vettore abbastanza lungo da estendersi su più righe, R stamperà l'indice dell'elemento iniziando ogni riga, così come stampa [1] all'inizio della prima riga.

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."

Il particolare comportamento della print dipende dalla classe dell'oggetto passato alla funzione.

Se chiamiamo print un oggetto con una classe diversa, come "numerico" o "logico", le virgolette vengono omesse dall'output per indicare che abbiamo a che fare con un oggetto che non è una classe di caratteri:

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

Gli oggetti fattoriali vengono stampati allo stesso modo delle variabili di carattere che spesso creano ambiguità quando l'output della console viene utilizzato per visualizzare gli oggetti nei corpi delle domande SO. È raro utilizzare cat o print tranne che in un contesto interattivo. Il richiamo esplicito di print() è particolarmente raro (a meno che non si desideri sopprimere l'aspetto delle virgolette o visualizzare un oggetto restituito come invisible da una funzione), poiché l'immissione di foo nella console è una scorciatoia per la print(foo) . La console interattiva di R è nota come REPL, un "read-eval-print-loop". La funzione cat è salvata al meglio per scopi speciali (come la scrittura di output su una connessione di file aperta). A volte viene utilizzato all'interno delle funzioni (dove vengono soppresse le chiamate a print() ), tuttavia l' uso di cat() all'interno di una funzione per generare output sulla console è una cattiva pratica . Il metodo preferito è message() o warning() per i messaggi intermedi; si comportano in modo simile al cat ma possono essere opzionalmente soppressi dall'utente finale. Il risultato finale dovrebbe semplicemente essere restituito in modo che l'utente possa assegnarlo per memorizzarlo se necessario.

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