格式化數值
若要將數值的資料依據指定的格式轉換為字串,可以使用 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."
另外還有兩個用於格式化數值輸出的 format
與 prettyNum
函數,format
跟 formatC
類似,只是參數的用法有些小差異而已。
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()