列印和顯示字串
R 有幾個可用於列印或顯示資訊的內建函式,但 print
和 cat
是最基本的。由於 R 是一種解釋型語言 ,你可以直接在 R 控制檯中嘗試這些:
print("Hello World")
#[1] "Hello World"
cat("Hello World\n")
#Hello World
注意兩個函式的輸入和輸出的差異。 (注意:使用 x <- "Hello World"
建立的 x
的值中沒有引號字元。它們在輸出階段由 print
新增。)
cat
將一個或多個字元向量作為引數並將它們列印到控制檯。如果字元向量的長度大於 1,則引數以空格分隔(預設情況下):
cat(c("hello", "world", "\n"))
#hello world
沒有換行符(\n
),輸出將是:
cat("Hello World")
#Hello World>
輸出後立即顯示下一個命令的提示。 (某些控制檯,例如 RStudio 可能會自動將換行符附加到不以換行符結尾的字串。)
print
是通用函式的一個示例,這意味著檢測到傳遞的第一個引數的類,並使用特定於類的方法進行輸出。對於像 Hello World
這樣的字元向量,結果類似於 cat
的輸出。但是,引用字串並輸出數字 [1]
以指示字元向量的第一個元素(在這種情況下,第一個也是唯一的元素):
print("Hello World")
#[1] "Hello World"
當我們簡單地要求 R 列印變數時,我們也會看到這種預設的列印方法。注意輸入 s
的輸出與呼叫 print(s)
或 print("Hello World")
相同:
s <- "Hello World"
s
#[1] "Hello World"
或者甚至沒有將它分配給任何東西:
"Hello World"
#[1] "Hello World"
如果再加另一個字串作為向量的第二元素(使用 c()
函式 ç oncatenate 的元件一起),然後 print()
的行為看上去從 cat
的相當多的不同的:
print(c("Hello World", "Here I am."))
#[1] "Hello World" "Here I am."
觀察該 c()
功能並沒有做字串串聯。 (為此需要使用 paste
。)R 表示字元向量通過分別引用它們而具有兩個元素。如果我們有一個足夠長的向量來跨越多行,R 將列印從每行開始的元素的索引,就像它在第一行的開頭列印 [1]
一樣。
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."
print
的特定行為取決於傳遞給函式的物件的類。
如果我們將 print
稱為具有不同類的物件,例如 numeric
或 logical
,則從輸出中省略引號以指示我們正在處理非字元類的物件:
print(1)
#[1] 1
print(TRUE)
#[1] TRUE
因子物件以與字元變數相同的方式列印,當控制檯輸出用於在 SO 問題體中顯示物件時,這通常會產生歧義。除了互動式環境外,很少使用 cat
或 print
。明確呼叫 print()
是非常罕見的(除非你想抑制引號的外觀或檢視一個函式返回的物件),因為在控制檯輸入 foo
是 print(foo)
的快捷方式。R 的互動式控制檯稱為 REPL,即“讀取 - 評估 - 列印 - 迴圈”。cat
函式最好儲存用於特殊目的(例如將輸出寫入開啟的檔案連線)。有時它在函式內部使用(對 print()
的呼叫被抑制), **** 。首選方法是 message()
或 warning()
用於中間訊息; 它們的行為與 cat
類似,但可以由終端使用者選擇性地抑制。應該簡單地返回最終結果,以便使用者可以指定它以在必要時儲存它。
message("hello world")
#hello world
suppressMessages(message("hello world"))