“Chúng ta có hai tai và một miệng để nghe nhiều hơn và nói ít hơn.”

Nhà triết học Hi Lạp Đê-nông

Giới thiệu về R

R là phần mềm mã nguồn mở (miễn phí) chuyên dụng cho việc tính toán thống kê và vẽ biểu đồ.

Cài đặt R

Vào link tải phần mềm R: chọn download R \(\rightarrow\) 0-Cloud

Mở R

Sau khi cài đặt, logo R sẽ xuất hiện trên desktop:

Giao diện R trên Windows:

Giao diện R trên OS X:

Chúng ta có thể thay đổi dấu nhắc lệnh > trên cửa sổ console bằng hàm options().

options(prompt = "R> ")

Chúng ta có thể sử dụng phím mũi tên đi lên để hiện thị lại câu lệnh nào đó đã được nhập trước đó trong cửa sổ console. Việc làm này sẽ giúp tiết kiệm thời gian nhập lại câu lệnh.

Mở cửa sổ biên tập (R editor pane):

Thông thường việc viết code trực tiếp trên giao diện R sẽ khá nhàm chán. Do đó, chúng ta sẽ sử dụng IDE (Integrated Development Environment) của R gọi là Rstudio để viết code R.

Vào link tải phần mềm Rstudio. Chọn Download Rstudio (Free). Sau khi cài đặt sẽ thấy logo Rstudio như sau:

Lưu ý: Chúng ta phải cài đặt R trước khi cài đặt Rstudio.

Để chú thích cho câu lệnh trong R ta dùng dấu #.

# Tính một cộng một
1+1
## [1] 2
sqrt(16) # Tìm căn bậc 2 của 16
## [1] 4

Để kiểm tra working directory (thư mục làm việc nơi mà R tìm file dữ liệu) ta dùng hàm getwd() (get working directory).

getwd()
## [1] "D:/Stats program/Stats Intro/Practice"

Để thiết lập working directory chúng ta dùng hàm setwd() (set working directory).

setwd("D:/R/Tien")
# R là thư mục trong ổ đĩa D và Tien là thư mục con của R

Thay vì phải thiết lập working directory bằng cách dùng hàm setwd(), chúng ta có thể tạo một project trong R bằng cách: chọn File \(\rightarrow\) New project.

Các gói trong R (R packages)

Ảnh minh họa một số gói trong R

Ảnh minh họa một số gói trong R

Gói (hay package) trong R là tập hợp các hàm và bộ dữ liệu do cộng đồng phát triển. Trong môi trường R, các gói này được lưu trữ trong thư mục có tên library. Thư viện trong R có thể phân thành 2 nhóm:

  1. Thư viện hệ thống (system library): chứa các gói quan trọng và đã được cài đặt sẵn. Trong nhóm này một số gói luôn luôn được load sẵn mỗi khi chúng ta mở R. Chúng chứa các hàm tích hợp sẵn (built-in functions) có thể sử dụng ngay khi mở R. Tuy nhiên cũng có một số gói khác khi cần sử dụng chúng ta cần phải load lên bằng hàm library().
library(MASS)
  1. Thư viện người dùng (user library): chứa các gói do người dùng tự cài đặt thêm. Để cài đặt một gói nào đó, chúng ta dùng hàm install.packages() và sau đó load nó lên bằng hàm library().
install.packages("ggplot2")
library(ggplot2)

Các gói trong R luôn luôn được các tác giả cập nhật theo thời gian. Do đó để cập nhật các gói trong thư viện máy của chúng ta, ta dùng hàm update.packages().

update.packages("ggplot2") # cập nhật package ggplot2
update.packages() # cập nhật tất cả các gói trong thư viện

Chúng ta có thể liệt kê tất cả các package có trong thư viện máy chúng ta bằng hàm .packages().

.packages(all.available = TRUE)
##   [1] "abind"          "AdequacyModel"  "AmesHousing"    "anytime"       
##   [5] "aplpack"        "askpass"        "assertthat"     "backports"     
##   [9] "base64enc"      "BH"             "bit"            "bit64"         
##  [13] "bitops"         "blob"           "brio"           "broom"         
##  [17] "BSDA"           "bslib"          "cachem"         "callr"         
##  [21] "car"            "carData"        "caret"          "cellranger"    
##  [25] "CEoptim"        "cli"            "clipr"          "coda"          
##  [29] "colorspace"     "commonmark"     "config"         "cowplot"       
##  [33] "cpp11"          "crayon"         "curl"           "data.table"    
##  [37] "DBI"            "dbplyr"         "desc"           "diffobj"       
##  [41] "digest"         "distributional" "dplyr"          "dtplyr"        
##  [45] "e1071"          "ellipsis"       "evaluate"       "expm"          
##  [49] "expsmooth"      "extrafont"      "extrafontdb"    "fable"         
##  [53] "fabletools"     "fansi"          "farver"         "fastmap"       
##  [57] "feasts"         "fma"            "FNN"            "fontawesome"   
##  [61] "forcats"        "foreach"        "forecast"       "forge"         
##  [65] "fpp2"           "fpp3"           "fracdiff"       "fs"            
##  [69] "furrr"          "future"         "future.apply"   "gargle"        
##  [73] "gcookbook"      "gdtools"        "generics"       "GGally"        
##  [77] "ggplot2"        "glmnet"         "globals"        "glue"          
##  [81] "gmm"            "googledrive"    "googlesheets4"  "gower"         
##  [85] "gridExtra"      "gridSVG"        "gtable"         "h2o"           
##  [89] "hardhat"        "haven"          "here"           "highr"         
##  [93] "hms"            "hrbrthemes"     "htmltools"      "httpuv"        
##  [97] "httr"           "ids"            "IndexNumber"    "ipred"         
## [101] "isoband"        "iterators"      "jquerylib"      "jsonlite"      
## [105] "kableExtra"     "keras"          "kernlab"        "knitr"         
## [109] "ks"             "labeling"       "later"          "lava"          
## [113] "lifecycle"      "listenv"        "lme4"           "lmtest"        
## [117] "lubridate"      "magrittr"       "maps"           "markdown"      
## [121] "Matrix"         "MatrixModels"   "mclust"         "memoise"       
## [125] "mime"           "minqa"          "misc3d"         "modeldata"     
## [129] "ModelMetrics"   "modelr"         "msm"            "muhaz"         
## [133] "multicool"      "munsell"        "mvtnorm"        "network"       
## [137] "nloptr"         "numDeriv"       "openssl"        "packrat"       
## [141] "parallelly"     "pbkrtest"       "pillar"         "pkgconfig"     
## [145] "pkgload"        "plot3D"         "plotROC"        "pls"           
## [149] "plyr"           "png"            "pracma"         "praise"        
## [153] "prettyunits"    "pROC"           "processx"       "prodlim"       
## [157] "progress"       "progressr"      "promises"       "proxy"         
## [161] "ps"             "purrr"          "quadprog"       "quantmod"      
## [165] "quantreg"       "R6"             "rappdirs"       "RColorBrewer"  
## [169] "Rcpp"           "RcppArmadillo"  "RcppEigen"      "RcppTOML"      
## [173] "RCurl"          "readr"          "readxl"         "recipes"       
## [177] "rematch"        "rematch2"       "reprex"         "reshape"       
## [181] "reshape2"       "reticulate"     "rlang"          "rmarkdown"     
## [185] "rprojroot"      "rsample"        "rsconnect"      "rstudioapi"    
## [189] "rticles"        "Rttf2pt1"       "rvest"          "sandwich"      
## [193] "sass"           "scales"         "seasonal"       "selectr"       
## [197] "shape"          "shiny"          "slider"         "sna"           
## [201] "sourcetools"    "SparseM"        "SQUAREM"        "statnet.common"
## [205] "stringi"        "stringr"        "survival"       "svglite"       
## [209] "sys"            "systemfonts"    "tensorflow"     "testthat"      
## [213] "tfautograph"    "tfestimators"   "tfruns"         "tibble"        
## [217] "tidyr"          "tidyselect"     "tidyverse"      "timeDate"      
## [221] "tinytex"        "tmvtnorm"       "tseries"        "tsibble"       
## [225] "tsibbledata"    "TTR"            "tufte"          "tzdb"          
## [229] "urca"           "USgas"          "utf8"           "uuid"          
## [233] "vctrs"          "vip"            "viridis"        "viridisLite"   
## [237] "visdat"         "vroom"          "waldo"          "warp"          
## [241] "webshot"        "whisker"        "withr"          "x13binary"     
## [245] "xfun"           "XML"            "xml2"           "xtable"        
## [249] "xts"            "yaml"           "zeallot"        "zoo"           
## [253] "base"           "boot"           "class"          "cluster"       
## [257] "codetools"      "compiler"       "datasets"       "foreign"       
## [261] "graphics"       "grDevices"      "grid"           "KernSmooth"    
## [265] "lattice"        "MASS"           "methods"        "mgcv"          
## [269] "nlme"           "nnet"           "parallel"       "rpart"         
## [273] "spatial"        "splines"        "stats"          "stats4"        
## [277] "tcltk"          "tools"          "translations"   "utils"

Trợ giúp trong R

Hàm help() hay dấu ? trong R cung cấp cho chúng ta trang thông tin chi tiết về các hàm, tập dữ liệu và những đối tượng khác trong các gói của R.

help(mean)
?mean
help(rlm, package = "MASS")

Khi chúng ta không chắc chắn về tên hàm cụ thể thì chúng ta có thể dùng hàm help.search() hoặc ?? để tìm theo cụm từ. Lúc đó R sẽ cho thông tin những gói chứa hàm cần tìm.

help.search("geometric mean")
??"geometric mean"

Lưu và thoát khỏi R

Không gian làm việc (workspace) là không gian tạm thời lưu trữ tất cả dữ liệu, phân tích, đầu ra dưới dạng các đối tượng. Để liệt kê tất cả các đối tượng đang có trong workspace chúng ta dùng hàm ls().

ls()
## character(0)

Để xóa đối tượng nào đó khỏi workspace chúng ta dùng hàm rm().

a <- 3
ls()
## [1] "a"
rm(a)
ls()
## character(0)

Không gian làm việc tạm thời sẽ biến mất khi chúng ta thoát khỏi R và tất cả các đối tượng sẽ biến mất theo. Thông thường khi chúng ta tắt R, chúng ta sẽ được hỏi có lưu workspace hay không. Lúc này chúng ta chỉ cần chọn lưu hay là không lưu. Để chủ động lưu workspace ta dùng hàm save.image().

# lưu workspace tại thư mục đang làm việc (file không tên)
save.image()
# lưu workspace tại thư mục đang làm việc (file có tên Tien và có đuôi .RData)
save.image(file = "Tien.RData") 
# lưu workspace trong ổ đĩa D, thư mục tên R và tên workspace là Tien
save.image(file = "D:/R/Tien.RData") 

R script là cửa sổ biên tập nơi chúng ta viết code và lưu lại.

Cuối cùng, để thoát khỏi R chúng ta có thể dùng hàm q() hay đơn giản hơn là bấm vào nút X ở góc trên phải của giao diện soạn thảo.

Tóm tắt

Hàm Chức năng
options() Thiết lập nhiều lựa chọn khác nhau trong R
# Tạo chú thích
getwd() Xuất thư mục làm việc hiện hành
setwd() Thiết lập thư mục làm việc hiện hành
library() Tải gói đã được cài đặt
install.packages() Cài đặt gói
update.packages() Cập nhật gói đã cài đặt
.packages() Liệt kê tất cả các gói có trong thư viện
help() or ? Trợ giúp
help.search() Tìm các file trợ giúp
ls() Liệt kê tất cả các đối tượng trong workspace
rm() Xóa đối tượng trong workspace
save.image() Lưu workspace
q() Thoát khỏi R

Tài liệu tham khảo

Davies, Tilman M. 2016. The Book of R: A First Course in Programming and Statistics. No Starch Press.