數聚點

數聚點

Share this post

數聚點
數聚點
約維安計畫:常用的 R 語言內建函數
中級約維安

約維安計畫:常用的 R 語言內建函數

二十九週

Yao-Jen Kuo's avatar
Yao-Jen Kuo
May 08, 2022
∙ Paid
1

Share this post

數聚點
數聚點
約維安計畫:常用的 R 語言內建函數
Share
來源:giphy.com

函數是 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 語言常見的系統功能函數、數值向量函數、文字向量函數與描述統計函數之後,本篇文章來到尾聲,希望您也和我一樣期待下一篇文章。

對於這篇文章有什麼想法呢?喜歡😻、留言🙋‍♂️或者分享🙌

Leave a comment

計畫學員專區

This post is for paid subscribers

Already a paid subscriber? Sign in
© 2025 DATAINPOINT, INC.
Privacy ∙ Terms ∙ Collection notice
Start writingGet the app
Substack is the home for great culture

Share