函數是 R 語言的核心,若是想成為擅長寫作 R 語言的資料分析師,必須對函數有一定程度的掌握。事實上早在這個章節之前我們就開始大量使用函數了,不管是建立向量時使用的 c()
函數、建立清單時使用的 list()
函數或者是檢查類型的 class()
函數
,都是常用的函數。
對初學者來說,對照輸出格式與內容符合所預期的輸入與參數,是使用函數時的良好行為行為。接著我們彙整一些常用的 R 語言系統功能函數(Utility functions)、數值向量函數(Numeric functions)、文字向量函數(Character functions)與描述統計函數。
系統功能函數
系統功能函數可以幫助使用者將 R 語言與電腦系統連結,常用的有:
print()
rm()
help()
sessionInfo()
Sys.getlocale()
getwd()
setwd()
print()
函數可以將物件的顯示內容印出在 Console。
hello_world <- "Hello, World!"
print(hello_world)
rm()
函數能夠將完成賦值的物件自環境中刪除,這個函數命名來自 remove 的縮寫。
hello_world <- "Hello, World!"
rm(hello_world)
tryCatch(
{
print(hello_world)
}, error = function(e) {
print("Object removed.")
}
)
help()
函數可以查詢內建資料以及函數的說明文件。
help(iris) # help on built-in dataset, ?iris works too
help(rm) # help on built-in function, ?rm works too
sessionInfo()
函數會顯示 R 語言的版本以及作業系統相關資訊。
sessionInfo()
Sys.getlocale()
函數顯示電腦的地區以及語系資訊。
Sys.getlocale()
getwd()
函數顯示 R 語言的工作目錄,這個函數命名來自 working directory 的縮寫。
getwd()
setwd()
函數能夠設定 R 語言的工作目錄,Windows 使用者要特別注意路徑斜線要使用正斜線 /
(而非 Windows 作業系統使用的反斜線 \
),並且避免在路徑設定上出現空格與非英文的文字。
setwd("/Users/YOURUSERNAME/Desktop") # Set MacOS Desktop as working directory
setwd("C:/Users/YOURUSERNAME/Desktop") # Set Windows Desktop as working director, USE / instead of \
數值向量函數
數值向量函數可以針對數值向量做處理或運算,常用的有:
abs()
sqrt()
ceiling()
floor()
round()
exp()
log()
log10()
abs()
函數能夠將輸入數值向量元素都轉換為絕對值,這個函數命名來自 absolute 的縮寫。
a_vector <- -5:-1
print(a_vector)
print(abs(a_vector))
sqrt()
函數能夠將輸入數值向量元素都開平方,這個函數命名來自 square root 的縮寫。
a_vector <- c(1, 4, 9, 16, 25)
print(a_vector)
print(sqrt(a_vector))
ceiling()
函數能夠將輸入數值向量元素都無條件進位。
a_vector <- 1:10
sqrt_a_vector <- sqrt(a_vector)
print(sqrt_a_vector)
print(ceiling(sqrt_a_vector))
floor()
函數能夠將輸入數值向量元素都無條件捨去。
a_vector <- 1:10
sqrt_a_vector <- sqrt(a_vector)
print(sqrt_a_vector)
print(floor(sqrt_a_vector))
round()
函數能夠調整數值向量元素小數位,以 5 作為基準,並靠攏數線上的偶數(Rounding off a 5, go to the even digit)。
a_vector <- c(-1.5, -0.5, 0.5, 1.5, 2.5, 3.5)
print(round(a_vector))
exp()
函數能夠將輸入數值向量元素調整為以自然對數函數之底數 e
的指數,其中 e
接近 2.718282
。
a_vector <- 1:5
print(exp(a_vector))
log()
函數能夠將輸入數值向量元素取以 e
為底數的對數。
a_vector <- exp(1:5)
print(log(a_vector))
log10()
函數能夠將輸入數值向量元素取以 10 為底數的對數。
bases <- rep(10, 5)
exps <- 1:5
a_vector <- bases**exps
print(log10(a_vector))
文字向量函數
文字向量函數可以針對文字向量做處理,常用的有:
toupper()
tolower()
substr()
grep()
sub()
strsplit()
paste()
paste0()
trimws()
toupper()
函數能夠將輸入文字向量元素全部轉換為大寫。
skywalkers <- c("Anakin Skywalker", "Luke Skywalker")
print(toupper(skywalkers))
tolower()
函數能夠將輸入文字向量元素全部轉換為小寫。
skywalkers <- c("Anakin Skywalker", "Luke Skywalker")
print(tolower(skywalkers))
substr()
函數能夠將輸入文字向量元素擷取部分,使用的時候搭配兩個參數, start
參數指定要從哪一個字元位置開始擷取, stop
參數指定要擷取到哪一個字元位置。
luke_skywalker <- "Luke Skywalker"
nchar_luke_skywalker <- nchar(luke_skywalker)
print(substr(luke_skywalker, start = 1, stop = 4))
print(substr(luke_skywalker, start = 6, stop = nchar_luke_skywalker))
grep()
函數能夠在文字向量中搜尋指定樣式並將符合所在索引值回傳,使用 pattern
參數指定樣式,如果搜尋後沒有符合樣式的,則會回傳 integer(0)
。
starwars <- c("Luke Skywalker", "Princess Leia Organa", "Anakin Skywalker", "Darth Vader")
print(grep(starwars, pattern = "Skywalker"))
print(grep(starwars, pattern = "Leia"))
print(grep(starwars, pattern = "Vader"))
print(grep(starwars, pattern = "Yoda"))
sub()
函數能夠在文字向量中搜尋到指定樣式指定替換為其他內容,使用 pattern
參數指定樣式,使用 replacement
參數指定要替換的文字,以這個範例來說明,我們將 "Anakin"
替換為 "Luke"
。
anakin_skywalker <- "Anakin Skywalker"
luke_skywalker <- sub(anakin_skywalker, pattern = "Anakin", replacement = "Luke")
print(luke_skywalker)
strsplit()
函數能夠將一個文字向量切割成清單,使用 split
參數可以指定要根據什麼分割符號來進行文字的切割,值得注意的是這個函數的輸出是以清單的資料結構儲存。
skywalkers <- c("Anakin Skywalker", "Luke Skywalker")
print(strsplit(skywalkers, split = " "))
skywalkers <- c("Skywalker, Anakin", "Skywalker, Luke")
print(strsplit(skywalkers, split = ", "))
paste()
函數能夠將多個文字向量連結起來為一個文字向量,使用 sep
參數可以指定連結起來以後要使用什麼分隔符號,預設是以一個空格來連結。
luke <- "Luke"
skywalker <- "Skywalker"
print(paste(luke, skywalker))
paste0()
函數與 paste()
函數作用相同,只是改為預設以空字串連結。
sky <- "Sky"
walker <- "walker"
print(paste0(sky, walker))
trimws()
函數能夠將文字向量中多餘空格刪除數,所謂的多餘空格指的是出現在文字左邊的空格(leading blanks)或出現在文字右邊的空格(trailing blanks),至於出現在文字之間的空格,由於多數語言句子的組成都習慣以空格區隔單字,並不算是多餘空格(像是 Luke Skywalker 名字與姓氏之間存在的空格)。加入 which = "left"
參數可以指定刪除左邊多餘空格、 which = "right"
參數可以指定刪除右邊多餘空格,預設 which = "both"
即刪除左邊與右邊多餘空格。
luke <- " Luke Skywalker "
print(trimws(luke))
print(trimws(luke, which = "left"))
print(trimws(luke, which = "right"))
描述統計函數
描述統計函數可以針對數值向量做摘要,常用的有:
mean()
sd()
median()
range()
sum()
max()
min()
mean()
函數能夠將輸入數值向量平均值回傳。
a_vector <- 1:100
print(mean(a_vector))
sd()
函數能夠將輸入數值向量標準差回傳,R 語言中的 sd()
函數定義為樣本標準差,在計算公式中分母使用的是 n — 1
a_vector <- 1:100
print(sd(a_vector))
median()
函數能夠將輸入數值向量中位數回傳。
a_vector <- 1:100
print(median(a_vector))
range()
函數能夠將輸入數值向量中最小值與最大值回傳。
a_vector <- 1:100
print(range(a_vector))
sum()
函數能夠將輸入數值向量中所有數值加總回傳。
a_vector <- 1:100
print(sum(a_vector))
max()
函數能夠將輸入數值向量中最大值回傳。
a_vector <- 1:100
print(max(a_vector))
min()
函數能夠將輸入數值向量中最小值回傳。
a_vector <- 1:100
print(min(a_vector))
描述統計函數都有一個共同的參數 na.rm
能夠將遺漏值向量 NA
排除,如果輸入帶有遺漏值向量,必須要指定 na.rm = TRUE
才能夠回傳答案( na.rm
預設為 FALSE
。)
a_vector <- 1:100
a_vector <- c(a_vector, NA) # combine a NA
print(min(a_vector))
print(min(a_vector, na.rm = TRUE))
在認識 R 語言常見的系統功能函數、數值向量函數、文字向量函數與描述統計函數之後,本篇文章來到尾聲,希望您也和我一樣期待下一篇文章。
對於這篇文章有什麼想法呢?喜歡😻、留言🙋♂️或者分享🙌