R語言導論 1-5章學習筆記

第一章 緒論

通過函數和特徵尋求幫助

查找solve函數的意思:help(solve)或者 ?solve

查看某個函數的使用實例: example(solve)

啟動幫助文檔的網頁瀏覽器help.start()

search() 查看哪些包已載入並可使用

安裝包: install.packages("gclus")

查看已安裝的包: installed.packages()

載入包: library(gclus) 在一個會話中,包只需載入一次

輸出某個包的簡短描述以及包中的函數名稱和數據集名稱的列表:help(package="gclus")

批處理文件和結果重定向

source("first.R")

sink("record.lis") 輸出到文件

sink() 輸出到控制台

第二章:簡單操作:數值與向量

2.1. 向量與賦值

數字向量: 由一組有序數字組成的單個實體

賦值:用函數c() 進行賦值,作用是將參數中的數值向量以及向量的值首尾相接成一個新的向量。

使用assign()函數與c()等價

2.2. 向量運算

同一個表達式中的向量並不需要具有相同的長度。如果它們的長度不同,表達式的結果是一個與表達式中最長向量有相同長度的向量。表達式中較短的向量會根據它的長度被重複使用若干次[從向量的第一個數開始](不一定是整數次),直到與長度最長的向量相匹配。

2.3 產生規則的序列

2.3.1 (1) d <- 1:10

(2) n <- 20 f <- 1:(n-1)

(3) 產生遞減序列 g <- 30:1

2.3.2 seq

(1) s3 <- seq(-5,5,by=0.2)

(2) s4 <- seq(length=10, from =-5,by =0.2)

2.3.3 rep

s5 <- rep(s3,times=2)

2.4 邏輯向量

邏輯操作符包括<,<=,>,>=,==,!=

如果c1,c2是邏輯表達式,那麼c1&c2是它們的交集,c1|c2是它們的並集,!c1是c1的反面

2.5 缺失值

當某個元素或者數值從統計角度講是"不可用"(not available)或者是"缺失值"(missing value),它們在向量中的位置將被保留,同時被賦值為一個特殊值NA。

函數is.na(x)返回一個邏輯向量,這個向量與x有相同的長度,並且由相應位置的元素是否是NA來決定這個邏輯向量相應的元素是TRUE還是FALSE

x==NA是一個與x具有相同長度而其所有元素都是NA的向量。

NaN: 由數值運算產生的「缺失值」,稱為Not a Number

例如: 0/0 Inf-Inf

如何區分NA和NaN值:函數is.nan(z)只對NaN值返回TRUE

2.6 字元向量

字元向量可以通過函數c()連接。函數paste()可以接受任意個參數,並從它們中逐個取出字元並連成字元串,形成的字元串的個數與參數中最長字元串的長度相同。如果參數中包含數字的話,數字將被強制轉化為字元串。在默認情況下,參數中的各字元串是被一個空格分隔的,不過通過參數sep=string用戶可以把它更改為其他字元串,包括空字元串。

2.7 索引向量:數據集子集的選擇與修改

選擇一個向量中元素的子集可以通過在其名稱後追加一個方括弧中的索引向量來完成。

有四種不同類型的索引向量:

1. 邏輯的向量

在索引向量中返回值是TRUE的元素所對應的元素將被選出,返回值是FALSE的值所對應的元素將被忽略。

2. 正整數的向量

3. 負整數的向量

這種索引向量的作用是把某些值排除而不是包括進來

4. 字元串的向量

這種可能性只存在於擁有names屬性並由它來區分向量中元素的向量。這種情況下一個由名稱組成的子向量起到了和正整數的索引向量相同的效果。

第三章 對象,模式和屬性

3.1 固有屬性:模式和長度

R操作的實體在技術上來說就是對象。實體或複數向量,邏輯向量和字元串向量之類的對象屬於"原子"型的對象,因為它們的元素都是一樣的類型或模式

最基本的結構: 數值型(numeric),復值型(complex),邏輯型(logical)以及字元型(character)

向量中的值必須是相同模式的。因此任何給定的向量必定是四種中的一種。一個空的字元串向量列印為character(0),一個空的數值向量列印為numeric(0)

一個對象的模式是該對象基本要素的類型。[即typeof函數]即來描述一個對象"特徵"的術語,另一個所有對象都有的特徵是長度。函數mode(object)length(object)可用於任何數據對象以得到其模式和長度。

3.2 改變對象長度

創建一個數值模式的空向量結構e。類似的是,character()是一個空的字元向量。一旦一個任意長度的對象被創建,新元素可以通過給定一個在先前索引範圍外的索引值而加入。

刪減一個對象的大小只需要用賦值操作,也可以用length函數保留前幾個值

3.3 讀取和設置屬性

函數attribute(object)給出對象當前定義的非內在屬性的列表。函數attr(object,name)可以用來選擇特定的屬性。

即將向量z轉換成10*10的矩陣

第四章 有序因子和無序因子

因子是一個對等長的其他向量元素進行分組的向量對象。R同時提供有序和無序因子

4.1 一個特別的例子

有一份來自澳大利亞所有州和行政區的30個稅務會計師的信息樣本以及他們各自所在地的州名。州名以字元串向量的形式保存在state中。

注意:在字元向量中,"有序"意味著以字母排序,因此,用levels()可以用來得到因子的水平

4.2 函數tapply()和不規則數組

假定我們有這些稅務會計師的收入信息並且保存在另外一個向量中

函數tapply()將一個功能函數(mean())用於第二個參數(這裡是statef)【statef是定義於第一個參數(incomes)上得到的所有組】。各個組的數據好像是獨立的向量,得到的結果向量長度和因子的水平數一致。

標準誤差: 標準誤差定義為各測量值誤差的平方和的平均值的平方根,故稱為均方誤差

方差: 隨機變數期望的二次偏差的期望。

關於標準誤差和標準差的區分:

標準偏差和標準誤差的區別 - SPSS專版 - 經管之家(原人大經濟論壇)

標準差和標準誤差的區別_百度文庫

進一步計算各個州的標準誤差.可以寫一個R函數來計算任意給定向量的標準誤差。

4.3 有序因子

因子的水平是以字母順序排列的,或者顯式地在factor中指定。

函數ordered()就是用來創建這種有序因子,在其他方面,函數ordered()和factor基本完全一樣。大多數情況下,有序和無序因子地唯一差別在於前者顯示地時候反應了各水平地順序。另外,在線性模型模擬地是偶,兩種因子對應地對照矩陣地意義式完全不同地。

第五章 數組和矩陣

5.1 數組

數組可以看作是帶有多個下標類型相同地元素集合,如數值型

維度向量是一個正整數向量。如果它的長度為k,那麼該數組就是k-維的,例如矩陣是2-維數組。

向量只有在定義了dim屬性後才能作為數組在R中使用。

5.2 數組索引以及數組分割

數組元素可以通過給定數組名及其後方括弧中用逗號隔開的下標訪問。

數組分割可以通過在下標位置給定一系列索引向量實現;如果某個位置上給定的索引向量為空,則該下標處所有可能值都會被取到。

例如: a[2, , ]是一個4*2的數組。它的維度向量是c(4,2),數據向量依次包括下面的值

5.3 索引數組

可以根據索引數組去給數組中不規則的元素集合賦值或者將數組中特定的元素返回到一個向量中。

例子:假如我們有一個4*5的數組X,我們可以做如下的事情:

1. 以向量的格式取出元素X[1,3],X[2,2]和X[3,1]

2. 在數組X中用0替換這些元素

5.4 array()數組

除了用設定一個向量dim屬性的方法來構建數組,還可以直接通過函數array將向量轉換得到.

Z <- array(data_vector,dim_vector)

dim(Z)表示維度向量c(3,4,2),Z[1:24]表示數據向量。空下標的Z[]和沒有下標的Z表示整個數組。

將數組元素全部置0

5.5 數組的外積

如果a和b是兩個數值數組,它們的外積將是這樣的一個數組:維度向量通過連接兩個操作數的維度向量得到(順序很重要);數據向量則由a的數據向量元素和b的數據向量元素的所有可能乘積得到。外積是通過特別的操作符%o%實現:

ab <- a %o% b

一種備選的方案:

ab <- outer(a,b,"*")

5.6數組的廣義轉置

兩種方法進行轉置:

1. B<- aperm(A,c(2,1))

2. B <-t(A)

5.7 矩陣工具

函數nrow(A)ncol(A)將會分別返回矩陣A的行數和列數,t(A)就是矩陣的轉置函數

5.7.1 矩陣相乘

矩陣相乘: %*%

如果A和B是大小一樣的方陣,那麼A*B是一個對應元素乘積的矩陣,而A%*%B是一個矩陣積。

如果x是一個向量,那麼 x %*% A %*% x是一個二次型

函數crossprod()可以完成"矢積"運算,也就是說crossprod(X,y)和t(X) %*%y等價,但是在運算上更加高效。如果crossprod()第二個參數忽略,它將默認和第一個參數一樣,即第一個參數和自己進行運算。

函數diag()的含義依賴於它的參數。當v是一個向量時,diag(v)返回以該向量元素為對角元素的對角矩陣。當M為矩陣時,diag(M)返回M的對角元素。如果k是單個值,那麼diag(k)的結果是k*k的方陣。

5.7.2 線性方程和求逆

b <- A %*%x

solve(A,b)

用solve(A,b)就可以求出線性方程組的根x

solve(A) 可以求出矩陣A的逆

5.7.3 特徵值和特徵向量

函數eigen(A)用來計算矩陣A的特徵值和特徵向量。這個函數的返回值是一個含有values和vectors兩個分量的列表。

ev <- eigen(A) 將把這個列表賦給ev

ev$val 表示A的特徵值向量,ev$vec是相應特徵向量構成的一個矩陣

如果僅僅只需要特徵值:

5.7.4奇異值分解和行列式

5.7.5 最小二乘法擬合和QR分解

5.8 用cbind()和rbind()構建分塊矩陣

5.9 對數組實現連接操作的函數c()

5.10 因子的頻率表

函數table()可以從等長的不同因子中計算出頻率表。如果有k個因子參數,那麼結果將是一個k-維的頻率分布數組。

假定statef是一個設定數據向量元素個體所在州的因子,那麼statefr <- table(statef)將會把一個樣本中各個狀態的頻率分布表賦給statefr.這些頻率會被排序且以因子的水平特性標記。

假設incomf是一個按適當定義的"收入階層"對數據向量元素進行分類的因子

這樣可以獲得頻率的二維表:


推薦閱讀:

彪悍開源的分析資料庫-ClickHouse
寫報告的人,你是用數據支撐你的觀點,還是因為數據找到論點?
哪些必備因素造就了一名優秀數據科學家?

TAG:数据分析工具 | R编程语言 | 金融IT |