格式化數值

若要將數值的資料依據指定的格式轉換為字串,可以使用 formatC 這個函數,這個函數可以讓我們使用類似 C 語言的方式來指定輸出格式。

x <- exp(1:3)
x
[1]  2.718282  7.389056 20.085537

formatC 函數的 digits 參數可以指定輸出數值的位數:

formatC(x, digits = 5)
[1] "2.7183" "7.3891" "20.086"

format 參數可以指定輸出數值格式:

formatC(x, digits = 5, format = "e")
[1] "2.71828e+00" "7.38906e+00" "2.00855e+01"

width 可指定輸出字串長度,不足的部分則會以空白補齊:

formatC(x, digits = 5, width = 8)
[1] "  2.7183" "  7.3891" "  20.086"

在 R 中也有一個 sprintf 函數,它跟一般程式語言中的 sprintf 函數用法一樣,其第一個參數是輸出的樣板,第二個以後的參數則是要輸出的各種資料變數。

item <- "the apple"
weight <- 3.2
sprintf("The weight of %s is %f kg.", item, weight)
[1] "The weight of the apple is 3.200000 kg."

sprintf 也可以直接處理向量的輸出:

items <- c("the apple", "the banana")
weights <- c(3.2, 2.5)
sprintf("The weight of %s is %f kg.", items, weights)
[1] "The weight of the apple is 3.200000 kg." 
[2] "The weight of the banana is 2.500000 kg."

%.1f 可以指定浮點數輸出至小數點以下第一位:

sprintf("The weight of %s is %.1f kg.", items, weights)
[1] "The weight of the apple is 3.2 kg." 
[2] "The weight of the banana is 2.5 kg."

以科學記號輸出,精確度到小數點下第二位:

sprintf("The weight of %s is %.2e kg.", items, weights)
[1] "The weight of the apple is 3.20e+00 kg." 
[2] "The weight of the banana is 2.50e+00 kg."

另外還有兩個用於格式化數值輸出的 formatprettyNum 函數,formatformatC 類似,只是參數的用法有些小差異而已。

format(x, digits = 5)
[1] " 2.7183" " 7.3891" "20.0855"
format(x, digits = 5, trim = TRUE)
[1] "2.7183"  "7.3891"  "20.0855"
format(x, digits = 3, scientific = TRUE)
[1] "2.72e+00" "7.39e+00" "2.01e+01"

prettyNum 函數則適用於輸出比較大或比較小的數值:

prettyNum(2^30, big.mark = ",")
[1] "1,073,741,824"
prettyNum(1/2^20, small.mark = " ", scientific = FALSE)
"0.00000 09536 743"

特殊字元

在字串中若要加入一些特殊字元(例如 tab 字元),可以運用跳脫字元的方式來處理:

cat("foo\tbar")
foo	bar

換行字元可使用 \n

cat("foo\nbar")
foo
bar

如果要輸入反斜線,則使用 \\

cat("foo\\bar")
foo\bar

單引號與雙引號也可以利用跳脫字元輸入:

cat("foo\"bar")
foo"bar
cat('foo\'bar')
foo'bar

如果是以雙引號包住單引號,就可以不需要跳脫字元,反之亦然:

cat('foo"bar')
foo"bar
cat("foo'bar")
foo'bar

另一個比較特別的字元是 alarm 字元(\a),輸出這個字元時會讓喇叭產生聲響:

cat("\a")

輸出 alarm 字元的效果等同時呼叫 alarm 函數:

alarm()