1 R語言101
本章節介紹學習R語言的基本知識,包括基本指令操作、運算子介紹等。
1.1 什麼是R語言
R語言是一種自由軟體程式語言,主要用於資料分析與統計運算,2000年時終於發表R 1.0.0,有關R語言的發展歷史可參考維基百科。基本的R軟體已經內建多種統計及分析功能,其餘功能可以透過安裝套件(Packages)加載,眾多的套件使R的使用者可以【站在巨人的肩膀上(Standing on the shoulders of giants (Hal R. Varian, Google))】做資料分析,截至2017年1月為止,R軟體可另外安裝的套件數目共有10,000個以上 (R Studio報導)。常用的套件清單可參考各項網路資訊,如R Studio的整理:Quick list of useful R packages
安裝套件Package的方法如下:
值得注意的是,套件名稱需要加上雙引號,舉例來說,若要安裝ggplot2
套件,則要在R的Console視窗內輸入:
若要載入已安裝的套件,則輸入library(套件名稱)
,範例:
載入已安裝的套件時,可以不用在套件名稱前後加雙引號,但也可以加 (參考資料)。
1.2 函數使用
在R中有許多內建函數,安裝套件後各套件也會提供各式各樣寫好的函數,函數使用方式為函數名稱(參數1,參數2,....)
,以計算平均數為例,可使用mean()
函數,範例如下:
## [1] 3.5
若想知道各函數所需參數,可使用?函數名稱
觀看函數作者所撰寫的說明文件
除非有指定參數名稱,函數的參數設定有順序性,如序列產生函數seq()
,參數順序為from, to, by
,代表序列起點、序列終點,以及相隔單位。
## [1] 1 3 5 7 9
## [1] 1 3 5 7 9
## [1] 1 3 5 7 9
1.3 變數設定
在開始深入學習R語言之前,首要任務是學習最基本的R程式碼:變數設定,在R語言中,主要使用<-
設定變數,設定方法為:變數名稱<-
變數內容(值),雖然變數名稱可依箭頭方向放置於左側<-
或右側->
,但為方便閱讀,變數名稱多放置於左側。
## [1] 1
## [1] 2
R語言也接受使用=
設定變數,此時變數名稱必須在左側,如:變數名稱=
變數內容
## [1] 1
除了變數設定外,str()
函數也為常用基本函數,str()
用在檢查與總覽各類變數型態。
## num 3
變數的命名有以下規則:
- 不可使用保留字,如break, else, FALSE, for, function, if, Inf, NA, NaN, next, repeat, return, TRUE, while等
- 開頭只能是英文字,或
.
- 大小寫敏感
1.4 執行視窗
R是可直譯的語言,也就是說,可以在執行視窗(Console)直接打程式碼,在視窗出現>
時,表示可輸入指令,若視窗出現+
時,表示前面的程式碼還沒打完,必須鍵入完整的程式碼讓R執行。
1.5 資料型態
在R語言中,常用的資料型態包括數值 (numeric)、字串 (character)、布林變數 (logic)以及日期 (Date)等。
1.5.1 數值 numeric
數值包括整數(沒有小數點)與浮點數(有小數點)的數值
值得注意的是,若數值長度超過 2^53
,必須導入bit64
package (Oehlschlagel 2020),將數值長度上限提高為2^63
,才能表示完整數值
## [1] 9007199254740992
## [1] 9007199254740992
## integer64
## [1] 9007199254740992
## integer64
## [1] 9007199254740993
1.5.2 字串 character
用雙引號"
框起的文字會被儲存為字串格式,若在數字前後加上雙引號,數字也會被儲存為文字形式,無法進行數值的加減乘除等運算。
1.5.4 日期 (Date)
用於表示日期,於資料分析中常用,使用Sys.Date()
指令可得系統日期。
## [1] "2020-07-20"
日期與字串的相關轉換操作可考慮使用簡單易懂的lubridate
(Spinu, Grolemund, and Wickham 2020) package,如果想要將年/月/日
格式的文字轉換為日期物件,可使用ymd()
函數(y表年year,m表月month,d表日day),如果想要將月/日/年
格式的文字轉換為日期物件,則使用mdy()
函數,以此類推。
## [1] "2012-03-03"
## [1] "2012-03-03"
其他使用方式可參考 The Yhat Blog。
1.6 基本運算子
1.6.1 數學基本運算
在R中,數學運算與其他程式語言相同
- 加
+
- 減
-
- 乘
*
- 除
/
- 餘數
%%
- 次方
^
## [1] 101
## [1] -99
## [1] 100
## [1] 0.01
## [1] 1
## [1] 8
###進階數學函數
- 四捨五入 round()
- 無條件捨去 floor()
- 無條件進位 ceiling()
## [1] 2.1
## [1] 1
## [1] 3
1.6.2 邏輯運算
常用之邏輯判斷也可在R中直接使用
- 大於
>
- 小於
<
- 等於
==
,為了不與變數設定混淆,判斷兩變數是否相等,要用雙等號 - 大於等於
>=
- 小於等於
<=
## [1] FALSE
## [1] TRUE
文字字串也可比較大小
## [1] FALSE
邏輯混合判斷,和JAVA等語言不同的是,在R中使用單符號即可表示且&
和或|
- 且
&
- 或
|
## [1] TRUE
## [1] FALSE
## [1] TRUE
## [1] TRUE
反向布林變數!
## [1] FALSE
## [1] TRUE
1.7 錯誤訊息
- Message:有可能的錯誤通知,程式會繼續執行
- Warning:有錯誤,但是不會影響太多,程式會繼續執行
- Error:有錯,而且無法繼續執行程式
- Condition:可能會發生的情況
## Warning in log(-1): 產生了 NaNs
## [1] NaN
## Error in mena(NA): 沒有這個函數 "mena"
錯誤訊息範例1:
# Error: could not find function "fetch_NBAPlayerStatistics"
# 找不到"fetch_NBAPlayerStatistics" function
可能原因:沒安裝或沒讀入SportsAnalytics package
錯誤訊息範例2:
# Error in library(knitr): there is no package called 'knitr'
# 找不到"knitr" package
可能原因:沒安裝knitr package
1.8 Help
R語言與套件均有完整的文件與範例可以參考,在R的執行視窗中,輸入?函數名稱
或?套件名稱
即可看到函數或套件的使用說明
除此之外,Stack Overflow中也有許多問答,可直接在網站中搜尋關鍵字與錯誤訊息。
如果找不到解答,發問時請附上可以重現錯誤的程式碼與資料,以及系統/套件的版本資訊,版本資訊可以透過執行下列程式碼取得:
## R version 4.0.1 (2020-06-06)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 18363)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=Chinese (Traditional)_Taiwan.950
## [2] LC_CTYPE=Chinese (Traditional)_Taiwan.950
## [3] LC_MONETARY=Chinese (Traditional)_Taiwan.950
## [4] LC_NUMERIC=C
## [5] LC_TIME=Chinese (Traditional)_Taiwan.950
##
## attached base packages:
## [1] grid stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] tidyr_1.1.0 curl_4.3 treemap_2.4-2
## [4] purrr_0.3.4 caret_6.0-86 lattice_0.20-41
## [7] MASS_7.3-51.6 arulesViz_1.3-3 arules_1.6-6
## [10] Matrix_1.2-18 fields_10.3 maps_3.3.0
## [13] spam_2.5-1 dotCall64_1.0-0 rpart.plot_3.0.8
## [16] rpart_4.1-15 googleVis_0.6.6 ggvis_0.4.5
## [19] plotly_4.9.2.1 shiny_1.4.0.2 treemapify_2.5.3
## [22] WDI_2.7.1 choroplethrMaps_1.0.1 choroplethr_3.6.3
## [25] acs_2.1.4 ggmap_3.0.0.902 maptools_1.0-1
## [28] rgeos_0.5-3 rgdal_1.5-12 sp_1.4-2
## [31] rvest_0.3.5 xml2_1.3.2 Rfacebook_0.6.15
## [34] httpuv_1.5.4 rjson_0.2.20 XML_3.99-0.3
## [37] jsonlite_1.6.1 httr_1.4.1 readxl_1.3.1
## [40] readr_1.3.1 SportsAnalytics_0.2 reshape2_1.4.4
## [43] stringr_1.4.0 data.table_1.12.8 RCurl_1.98-1.2
## [46] rmarkdown_2.3 knitr_1.28 bookdown_0.20
## [49] bit64_0.9-7.1 bit_1.1-15.2 lubridate_1.7.9
## [52] dplyr_1.0.0 ggplot2_3.3.1
##
## loaded via a namespace (and not attached):
## [1] uuid_0.1-4 backports_1.1.7 Hmisc_4.4-0
## [4] igraph_1.2.5 plyr_1.8.6 lazyeval_0.2.2
## [7] splines_4.0.1 gridBase_0.4-7 digest_0.6.25
## [10] foreach_1.5.0 htmltools_0.4.0 viridis_0.5.1
## [13] gdata_2.18.0 magrittr_1.5 checkmate_2.0.0
## [16] cluster_2.1.0 gclus_1.3.2 recipes_0.1.12
## [19] ggfittext_0.9.0 gower_0.2.1 jpeg_0.1-8.1
## [22] colorspace_1.4-1 rappdirs_0.3.1 xfun_0.14
## [25] crayon_1.3.4 zoo_1.8-8 survival_3.1-12
## [28] tigris_1.0 iterators_1.0.12 glue_1.4.1
## [31] registry_0.5-1 gtable_0.3.0 ipred_0.9-9
## [34] scales_1.1.1 DBI_1.1.0 Rcpp_1.0.4.6
## [37] viridisLite_0.3.0 xtable_1.8-4 htmlTable_2.0.1
## [40] units_0.6-7 foreign_0.8-80 Formula_1.2-3
## [43] stats4_4.0.1 lava_1.6.7 prodlim_2019.11.13
## [46] DT_0.13 vcd_1.4-7 htmlwidgets_1.5.1
## [49] gplots_3.0.3 RColorBrewer_1.1-2 acepack_1.4.1
## [52] ellipsis_0.3.1 pkgconfig_2.0.3 nnet_7.3-14
## [55] RJSONIO_1.3-1.4 tidyselect_1.1.0 rlang_0.4.6
## [58] later_1.1.0.1 visNetwork_2.0.9 munsell_0.5.0
## [61] cellranger_1.1.0 tools_4.0.1 generics_0.0.2
## [64] evaluate_0.14 fastmap_1.0.1 yaml_2.2.1
## [67] ModelMetrics_1.2.2.2 caTools_1.18.0 RgoogleMaps_1.4.5.3
## [70] dendextend_1.13.4 packrat_0.5.0 nlme_3.1-148
## [73] mime_0.9 compiler_4.0.1 rstudioapi_0.11
## [76] png_0.1-7 e1071_1.7-3 tibble_3.0.1
## [79] stringi_1.4.6 highr_0.8 classInt_0.4-3
## [82] vctrs_0.3.1 pillar_1.4.4 lifecycle_0.2.0
## [85] lmtest_0.9-37 bitops_1.0-6 seriation_1.2-8
## [88] R6_2.4.1 latticeExtra_0.6-29 promises_1.1.1
## [91] TSP_1.1-10 KernSmooth_2.23-17 gridExtra_2.3
## [94] codetools_0.2-16 gtools_3.8.2 assertthat_0.2.1
## [97] withr_2.2.0 hms_0.5.3 timeDate_3043.102
## [100] class_7.3-17 pROC_1.16.2 sf_0.9-5
## [103] scatterplot3d_0.3-41 base64enc_0.1-3
References
Oehlschlagel, Jens. 2020. Bit64: A S3 Class for Vectors of 64bit Integers. https://CRAN.R-project.org/package=bit64.
Spinu, Vitalie, Garrett Grolemund, and Hadley Wickham. 2020. Lubridate: Make Dealing with Dates a Little Easier. https://CRAN.R-project.org/package=lubridate.