程式碼地址:https://github.com/aaqil/r-lang-fundamentals
R 語言最近剛剛擁有了 TensorFlow 介面,目前公認最好用的 R 語言 IDE 是 R Studio。在學習之前,你需要了解一下 R 語言本身。
為什麼要學習 R 語言?
R 很靈活;
R 很強大;
R 不僅是個統計計算工具包,它還是一門程式語言;
R 可以針對問題的形式設計程式;
R 可以高效地處理和儲存資料。
R 語言的程式碼通用性較好,微調任務後只需要再微調程式碼就可以直接應用。
R 安裝
選擇你喜歡的 CRAN 映象進行安裝:https://cran.r-project.org/mirrors.html
R Studio
R Studio 是很高效的版本,它包括一個程式碼編輯器、除錯和視覺化工具。它是一個整合開發環境,包括一個控制檯、支援直接程式碼執行的語法高亮顯示編輯器,以及繪圖、歷史查詢、除錯和工作區管理的工具。
R Studio 下載地址:https://www.rstudio.com/products/rstud
R Studio 快照
互動使用 R 語言
成功安裝 R 語言之後,在終端或 shell 裡點選「R」啟動互動式 shell。
你可以將 R shell 當成計算器使用,執行簡單的數學,甚至高階的機器學習演算法。
執行以下命令退出 R 程式:
> q()
你可以點選「y」儲存工作區會話,如果直接點選「n」,則不儲存直接返回終端/shell。
我們從在 R 互動式 shell 中輸出「Hello World!」開始學習。
在 R 中我們使用 print() 函式返回引數中給定的字串:
$R
> print("Hello World!")
[1] "Hello World!"
>
R 語言的命令
R 語言支援命令,而這些命令會被直譯器忽略。
以下是一些 R 語言的命令的例子:
# This is a comment in R
# print("This doesn't work")
變數
R 語言的變數可以儲存一個原子向量(atomic vector)、一組原子向量或多個 R 物件的組合。R 語言的命名區分大小寫。在為資料結構命名的時候,我們需要遵循以下規則:
以. 起始的命名是系統命名,並且使用 ls() 函式時這些命名不總是可見。
a <- 3
上面的程式碼宣告瞭一個變數「a」並分配了值 3。
typeof() 函式返回變數的資料型別。
type(a)
[1] "double"
R 語言的資料型別
numeric(實數或十進位制數):十進位制值在 R 語言中被稱為 numeric,是預設的計算資料型別。
此外還包括 integer(整數)、charater(字串)、logical(邏輯值)、complex(複數)等,以下是這些資料型別的定義程式碼示例:
a <- 3
# Numerical
print(a)
typeof(a)
name <- "Stark"
# Character
print(name)
typeof(name)
holiday <- TRUE
# Logical
print(holiday)
typeof(holiday)
distance <- 1 + 4i
# Complex
print(distance)
typeof(distance)
使用命令「Rscript filename.R」在 shell 上執行 R 檔案。
[1] 3
[1] "double"
[1] "Stark"
[1] "character"
[1] TRUE
[1] "logical"
[1] 1+4i
[1] "complex"
注意:R 語言的字串是 Character 型別的。
算術運算
R 語言可以執行所有基本的算術運算,例如加、減、乘、除等。
# Addition
sum = 4+2
print(sum)
# Subtraction
diff = 6-5
print(diff)
# Multiplication
product = 7*45
print(product)
# Division
div = 50/6
print(div)
# Remainder
rem = 3%%8
print(rem)
# Quotient.
q = 5%/%3
print(q)
# Power
power = 5^3
print(power)
[1] 6
[1] 1
[1] 315
[1] 8.333333
[1] 3
[1] 1
[1] 125
R 語言中的資料結構
原子向量
在 R 語言中,向量是最常用的資料結構。向量是相同型別的資料元素的序列。向量成員的正式名稱是成分(component)。向量的元素的資料型別可以是 character、logical、integer 或 numeric。
我們使用 vector() 函式建立一個空向量,以下程式碼展示瞭如何宣告一個向量:
x <- vector()
> character(5)
[1] "" "" "" "" ""
列表
R 語言的列表作為容器,是包含其它物件的通用向量。和原子向量不同,列表中的變數不侷限於單一的資料型別,可以包含任意的資料型別的混合。一個列表可以包含其它列表。
R 語言中的列表可以用 list() 函式建立。
my_list <- list("Red", TRUE, 51.23)
list_1 <- list("Red", TRUE, 51.23)
print(list_1)
# Merging the lists
list_2 <- list(1,2,3)
list_3 <- list("Sun","Mon","Tue")
# Merge the two lists
merged.list <- c(list_2,list_3)
# Print the merged list.
print(merged.list)
[1] "Red"
[[2]]
[1] TRUE
[[3]]
[1] 51.23
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
[[4]]
[1] "Sun"
[[5]]
[1] "Mon"
[[6]]
[1] "Tue"
矩陣
在 R 語言中,矩陣是一種特殊型別的向量。矩陣是資料元素以二維矩形排布的集合,矩陣有行和列。
現在我們建立一個 2x2 矩陣,使用 matrix 函式並以行和列作為引數。行數以 nrow 表示,列數以 ncol 表示。
my_matrix <- matrix(nrow = 2, ncol = 2)
my_martix <- matrix(nrow = 8, ncol = 4)
# It creates a matrix with 8 rows and 4 cloumns.
# But initially they all are empty(NA).
# These are used to enter the data into the matrix.
# Here c() function is used to concatenate the data.
# In the below example the data is filled by column wise.
my_martix[, 1] <- c(59, 55, 53.5, 55, 52.5, 57.5, 53, 55)
my_martix[, 2] <- c(22.3, 19.7, 20.8, 20.3, 20.8, 21.5,20.6, 21.5)
my_martix[, 3] <- c(31.2, 30.4, 30.6, 30.3, 30.3, 30.8,32.5,34)
my_martix[, 4] <- c(9.5, 13.8, 14.8, 15.2, 15.5, 15.6,15.6, 15.7)
print(my_martix)
[,1] [,2] [,3] [,4]
[1,] 59.0 22.3 31.2 9.5
[2,] 55.0 19.7 30.4 13.8
[3,] 53.5 20.8 30.6 14.8
[4,] 55.0 20.3 30.3 15.2
[5,] 52.5 20.8 30.3 15.5
[6,] 57.5 21.5 30.8 15.6
[7,] 53.0 20.6 32.5 15.6
[8,] 55.0 21.5 34.0 15.7
資料幀(data frame)
資料幀是 R 語言裡最常用的資料結構之一。資料是由帶有行和列的資料表格表示的。
我們通常在資料幀裡讀取一個 csv 檔案,使用 read.csv() 或 read.table() 函式,然後把 csv 檔案的名字作為引數輸入函式裡來實現的。
我們也可以用 data.frame() 函式來建立一個資料幀。
> df <- data.frame(id = letters[1:5], x = 1:10, y = rnorm(10))
> df
> ## id x y
> ## 1 a 1 -1.37593
> ## 2 b 2 0.47094
> ## 3 c 3 -0.16046
> ## 4 d 4 -1.36914
> ## 5 e 5 0.39763
這裡有幾個重要的函式,應用到資料幀得出其結構資訊等。
head() 用來看前 6 行
tail() 用來看後 6 行
dim() 用來看維度
nrow() 行的數量
ncol() 列的數量
str() 每一列的結構
因子(factor)
因子是帶標籤的整數。因子看起來像字元向量,但實際上是整數,當你把它們當成字元來對待時,需要特別謹慎。一些字元處理方法會強制把因子轉換成字元,而其他的字元處理方法會報錯。
因子可以用 factor() 函式建立。輸入一般是字元向量。
> x <- factor(c("yes", "no", "no", "yes", "yes"))
> x
[1] yes no no yes yes
Levels: no yes
# table(x) will return a frequency table.
控制結構
以下是控制函式的指令碼執行流程的常用結構,包括:
1. if, else
2. for
3. while
4. repeat
5. break
if-else
我們經常需要可以檢查一個程式的狀態和改變這個程式的行為的功能。條件語句可以提供這樣的功能,最簡單的形式是 if 語句。
if (condition) {
# do something
} else {
# do something else
}
例子
x <- 1:15
if (sample(x, 1) <= 10) {
print("x is less than 10")
} else {
print("x is greater than 10")
}
for 迴圈
R 語言裡的 for 迴圈可以在任何列表或向量中執行。
for (i in 1:5) {
print(i)
}
上述程式碼是在 R 語言裡宣告 for 迴圈的例子,for 迴圈讓迴圈變數 i 在給定的範圍內迭代。
1
2
3
4
5
幾種實現 for 迴圈的方法。
x <- c("apples", "oranges", "bananas", "strawberries")
# Prints the list items with the index.
for (i in x) {
print(x[i])
}
for (i in 1:4) {
print(x[i])
}
for (i in seq(x)) {
print(x[i])
}
# Inline
for (i in 1:4) print(x[i])
[1] NA
[1] NA
[1] NA
[1] NA
[1] "apples"
[1] "oranges"
[1] "bananas"
[1] "strawberries"
[1] "apples"
[1] "oranges"
[1] "bananas"
[1] "strawberries"
[1] "apples"
[1] "oranges"
[1] "bananas"
[1] "strawberries"
while
一個 R 語言裡的 while 迴圈會反覆的執行目標語句,只要給定的條件一直是真。不像 for 迴圈,while 迴圈不會確定迴圈次數,而會一直跑直到條件不滿足。
while 迴圈句法
while(condition){
statements
iteration
}
這是一個例子,我們實現一個簡單的 while 迴圈。
i <- 1
while (i < 5) {
print(i)
i <- i + 1
}
1
2
3
4
5
repeat 和 break
一個 repeat 迴圈是用來反覆執行一段程式碼的,其中沒有檢查條件然後退出的機制。
repeat 和 break 的句法
repeat{
condition
statements
break
}
現在,讓我們用 repeat 和 break 來輸出前五個數字。
x <- 1
repeat {
print(x)
x = x+1
if (x == 6){
break
}
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
函式
在任何程式語言中函式的主要作用就是可複用性。函式是一系列宣告的組合以執行特殊的任務。在 R 語言裡有很多內建的函式,例如 sum()、min()、max()、mean() 等。
R 語言中宣告函式的句法
function_name <- function(arg_1, arg_2, ...) {
function body
}
現在讓我們建立一個函式來輸出一系列的數字。
my_function <- function(a) {
for(i in 1:a) {
b <- i^3
print(b)
}
}
# Now call the function supplying 6 as an argument
my_function(6)
216
R 語言裡的視覺化
資料視覺化是對決策至關重要的參考。R 語言為了建立資料儲存和視覺化兒提供了最好的內建函式和庫。
現在,讓我們用 R Studio 裡的 ggplot2 來建立一個簡單的線圖,我們需要安裝 ggplot2 包,你會在左角找到控制檯,執行命令安裝包(「package_name」):
> install.packages("ggplot2")
我們現在匯入一個內建的資料集(mpg),然後畫一個簡單的圖。
關於 mpg 資料集:這是一個關於燃料經濟的資料集,包含了從 1999 年到 2008 年 38 種流行車款的資料。
1. 一個 234 行和 11 個變數的資料幀;
2. displ-發動機排量,以升為單位;
3. hwy-高速公路耗油量,英里每加侖。
library(ggplot2)
# Plots mpg dataset's with Xaxis - displ and Yaxis - hwy
# We can also specify the color pallete by sending the colour argument.
ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()
原文連結:https://towardsdatascience.com/r-lang-zero-to-hero-c59a9f66841c