一、R語言基礎
快速熟悉R語言中的基本概念,先入個門。
1、運算符
運算符 | 含義 | 例子 |
---|---|---|
+ | 加 | 1 + 1 |
- | 減 | 3 - 2 |
* | 乘 | 3 * 2 |
/ | 除 | 9 / 3 |
^(**) | 乘方 | 2 ^ 3? ?2 ** 3 |
%% | 取余 | 5 %% 2 |
%/% | 取整 | 5 %/% 2 |
2、賦值符號
等號 | = | a = 1 | 三者等價:把1賦值給變量a |
左箭頭 | <? | a <- 1 | |
右箭頭 | ?> | 1 -> a |
?3、基本數據類型
類型 | |
---|---|
數值型 "numeric" | class函數來探查數據的類型 |
數值型數據還可以分為:整數型(integer)和雙精度型(double) 數字會被自動認為雙精度型 聲明使用的數據是整數型:在數值后面加上L 可以使用typeof函數查看數值型數據的具體類型 | |
邏輯型 "logical" | 大于(>)、大于或等于(>=)、 小于(<)、小于或等于(<=)、 等于(==)、不等于(!=) |
?缺失值(NA)的數據類型也被歸為邏輯型數據 | |
字符型 "character" | 所有文本類型的數據都屬于字符型,附上雙引號或單引號進行定義。 class("abc") class("復旦大學") |
可以使用“==”或“!=”符號來判斷兩個文本是不是完全一致 "hope" == "hope" "hope" != "Hope" | |
因子型 "factor" | 因子型,被視為把字符型數據以數值型保存的特殊格式 利用factor函數創造因子變量 a = factor("男") |
用as系列函數來進行強制類型轉換,因子變量的字符形態和數值形態 as.numeric(a) as.character(a) | |
轉換失敗時,會返回缺失值NA,并輸出警告 as.character(12345) as.numeric("hello") |
4、數據結構
向量 vector | c("你","我","他")? length(c(1,3,4))? |
矩陣 matrix | matrix(1:9,nrow = 3,ncol = 3) |
a = matrix(1:12,ncol = 3) #nrow和ncol參數可以只定義一個 dim(a)? ?#使用dim函數可以知道矩陣一共有幾行幾列 | |
列表 list | a = list(3,TRUE,"hello") |
數據框 data.frame | 數據框是一種特殊的二維數據結構。同為二維數據結構,與矩陣不同的是,它的每一列可以視為一個向量,而每一行則可以視為一個列表。因此在一個數據框中可以有不同的屬性(以列的形式存在)?,每一行則代表著一個觀測實體。 library(pacman) p_load(tidyfst) as_dt(iris)? ?#利用了tidyfst包的as_dt函數,把iris轉換為data.table格式 注意:<num>是numeric的縮寫,<fctr>是factor的縮寫) |
5、程序流程控制
選擇結構 | 在只有一條執行語句的時候,不需要寫花括號 |
如果需要執行多個語句,則需要加上花括號。 保險起見,應該在所有if語句和else語句之后都加上花括號. | |
ifelse函數,如滿足第一個條件,執行第一項;否則,執行第二項 | |
for循環 | ![]() |
希望跳過某一個循環,例如在i等于3的時候,我們不要打印。這時候就可以使用next語句。這個類似于其他語言中的continue用法。 | |
while循環 | ![]() |
還有一種特殊的循環模式叫作repeat,它相當于while(1){…}。也就是說,這個循環如果沒有內置的停止機制,就會一直運行下去,可以在里面附加條件語句來終止運行。 |
6、函數
利用function函數來定義一個函數。 所有的R函數中,我們會把函數的最后一個執行結果作為函數的返回值。 |
4.0.0版本以后的R語言支持函數的便捷寫法,可以使用一個反斜杠(\)來代表函數(function)。 也可以使用return函數顯式地返回一個值。 |
二、管道操作符
管道操作符(%>%)是由magrittr包提供的方便操作符,能夠讓數據在函數之間快速傳遞,避免中間變量的生成,從而減少內存的占用。
管道操作符會讓之前生成的結果作為第一個參數傳遞到后面的函數中,即f(x)與x %>% f()是等價的
mean(1:3)
1:3 %>% mean()
當數據不是作為第一個參數傳遞到后面的函數,這時候可以使用“.”作為前面數據的指代來放在后面的函數中
lm(Sepal.Length~Sepal.Width,data=iris)
iris %>% lm(Sepal.Length~Sepal.Width,data=.)