1 R
程式語言
1 1.1安裝
R語言
. . . 1 1.2開始使用
R語言
. . . 3 1.3常用指令函數
. . . 9 1.4讀存取
R資料檔或外部資料檔
. . . 24 1.5作圖函數
. . . 31 2 R軟體與敘述統計
37 2.1次數計算統計表
. . . 39 2.2基本敘述統計
. . . 42 2.3常態分配
. . . 45 2.4常用統計圖
. . . 49 3二維數據分析
:R軟體
56 3.1雙變量數據
. . . 56 3.2簡單回歸分析
. . . 59 4附錄
:R指令
661 R
程式語言
R
程式語言誕生於
90年代初期
,由奧克蘭大學的
Ross Ihaka與
Robert Gentleman所發展出來的
,它是以
S語言
(誕生於
70年代的貝爾實驗室
,主要作者為
John Chambers)。
資料分析工具中
,R語言具有免費
,擁有強大的資料視覺化能力、 支援跨平台、 開放源碼及學習資
源豐富其功能可透過套件增強等優勢。
R內建多種統計學及數字分析功能。
R的功能也可以透過安裝套件
(Pa kages,用戶撰寫的功能
)增強。
因為
S的血緣
,R比其他統計學或數學專用的編程語言有更強的物件導向
(物件導向程式設計
,S3, S4等
)功能。
R的另一強項是繪圖功能
,製圖具有印刷的素質
,也可加入數學符號。
雖然
R主要用於統計分析或者開發統計相關的軟體
,但也有人用作矩陣計算。 其分析速度可媲美專用
於矩陣計算的自由軟體
GNU O tave和商業軟體
MATLAB。
(維基百科
)R
的功能能夠透過由用戶撰寫的套件增強。 根據
CRAN紀錄有七千多種不同的軟體包。 其中有幾款
較為常用
,例如用於經濟計量、 財經分析、 人文科學研究以及人工智慧。
R
官方首頁
:https://www.r-proje t.org/1.1
安裝
R語言
以下針對
Windows作業系統
,開始安裝
R語言。
下載安裝
: R-3.5.2 for Windows (79 megabytes, 32/64 bit) Last hange: 2018-12-20依照自己作業平台選擇安裝軟體
Mi rosoftWindows: http:// ran.r-proje t.org/bin/windows/base/ Ma OS: http:// ran.r-proje t.org/bin/ma osx/Linux: http:// ran.r-proje t.org/bin/linux/
R-GUI:
圖形使用者界面
安裝
R軟體
Windows版後
,可以執行
Rgui.exe程式或經由
"開始
"⇒
"程式集
"⇒
R⇒
R3.5.2
進入
R的圖形界面模式
下載安裝
RStudio:安裝一般桌面版的
RStudio,在
Google搜尋 「
RStudio」
「
RStudio」
首頁
https://www.rstudio. om/點選
Download RStudio選擇
"免費桌面版
"RStudio Desktop free
點選作業版本
"RStudio 1.1.463 - Windows Vista/7/8/10 "把這個
安裝檔安裝起來
(一直點下一步
/同意
,採用它預設的設定就好
)把
RStudio點開來以後
,展開的畫面會像這樣
:依照以下順序
(1.點擊 「
File」
⇒
2.「
New File」
⇒
3.「
R S ript」
)RStudio
介面主要的四個區塊與功能簡介
: 1.來源
(Sour e):位於左上角
,編寫程式的區塊
2.命令列
(Console):位於左下角
,執行程式的區塊
3.環境與歷史
:位於右上角
(a)環境
(Environment):目前的變數清單
(b)歷史
(History):在命令列執行過哪些指令
4.檔案、 圖形、 套件、 查詢與預覽器
:位於右下角
(a)檔案
(Files):使用者的工作目錄
(b)圖形
(Plots):顯示圖表
( )套件
(Pa kages):安裝套件的清單
順伯的窩
第
頁
共
頁
(d)
查詢
(Help):顯示查詢文件
(e)預覽器
(Viewer):顯示網頁
在
R-studio文字稿區塊輸入
print ("Hello , world !")代碼
,然後另存檔案為
"hw.r R文件檔
,並由
RStudio會話介面使用命令源
sour e("file.r")讀取它
,就會出現上次的
文字稿。
1.2
開始使用
R語言
注意
,在
R指令的英文大小寫有差異
,s與
S是不同的
,R也保留一些物件與指令名稱
,如
,s, C, T, F等
,這些叫做
"保留名字
另外一些系統常用的指令名稱
,如
q st CD FI Tdimean pirangerank var
· · ·
對物件命名時盡量避免定義一個物件
,與現有的物件同名
.所以命名時要避免重覆
,以
免後來引起錯亂。 對物件命名時
,物件名稱起始位置須以文字或
". (句點
),若物件名稱以
". (句點
)為起始
,名稱第二個位置需為文字
,物件名稱其餘位置
,以文字
(A − Z
或
a − z
),數字
(0 − 9
),"/
, ".,或
"−
,皆可
,中間不可有空格或
"R
的最基本物件是向量
,"向量
是指包含相同
"模式
(mode)的元素
(element)組成
,主要有
6種基本模式 邏輯
logi al,整數
integer,倍精準度
double,單精準度
single,複數
omplex,及文字
hara ter,
同一向量內的元素不可混合。
求助指令
help:用
help("指令
)可幫助了解該指令的操作功能。
help(topi )R
數值基本運算
:加
+,減
-,乘
*,除
/,整數商
%/%(高斯商數
),餘數
%%(mod),冪次方
**或
^範例
1:在命令列輸入下列指令後按
Enter鍵
,看看輸出結果
> 2 - 1 * 2 > -1/-1 #除法運算
> 6/3 -2+1*0+3/3-3 > 2**-3 #指數運算
> 2^17%% 17 #求餘數
> 19 %% 17 %% 13 # ompare to (19 %% 17) %% 13 and 19 %% (17 %% 13) > 3-2 %% 5+3 *2-4/2建立資料
:用
指令建立資料
R軟體中有六種屬性資料
,分別為
1.文字字串
( hara ter) : "a", "sw " 2.數值
(numeri ):實數
2,15.5 ,... 3.整數
(integer): 3,2L ,(R中儲存資料視
L為一整數
) 4.邏輯
(logi al): TRUE, FALSE5.
複數
( omplex):1 + 4i
(分為實數部分
+虛數部分
) 6.二進位資料
(raw):01011001, mydata資料名稱
,可自己建立。
=亦可使用
<-。
資料為向量資料
範例
2:輸入資料
>mydata1 = (1,2,3,4,5,6,7,8,9) > mydata1 [1℄ 1 2 3 4 5 6 7 8 9順伯的窩
第
頁
共
頁
>mydata2<- 2:10 > mydata2 [1℄ 2 3 4 5 6 7 8 9 10 > mydata<- (mydata1,mydata2) #
合併兩向量資料
> mydata [1℄ 1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 10範例
3:資料運算
> 1/mydata1 #向量資料算術運算
[1℄ 1.0000000 0.5000000 0.3333333 0.2500000 0.2000000 0.1666667 0.1428571 0.1250000 0.1111111 > mydata1^2 [1℄ 1 4 9 16 25 36 49 64 81 > 2*mydata1+1 [1℄ 3 5 7 9 11 13 15 17 19 > log(mydata1,10) #對向量資料每一元素取函數值
[1℄ 0.0000000 0.3010300 0.4771213 0.6020600 0.6989700 0.7781513 0.8450980 0.9030900 0.9542425 > 2^mydata1 [1℄ 2 4 8 16 32 64 128 256 512 #兩向量資料運算
> mydata1+mydata2 [1℄ 3 5 7 9 11 13 15 17 19 > mydata1*mydata2 #兩向量兩兩乘積
[1℄ 2 6 12 20 30 42 56 72 90 #自定義運算式
> xi<- (mydata1,10) > xi [1℄ 1 2 3 4 5 6 7 8 9 10 #等同
seq(1,10,by=1) > sum((xi - mean(xi))^2)/(length(xi)- 1) [1℄ 9.166667 > var(xi) #內建變異數函數
[1℄ 9.166667範例
4:資料篩選
> xi[xi>5℄ [1℄ 6 7 8 9 10 > xi[ (2,3,5)℄ [1℄ 2 3 5 > xi[xi > 5 & xi < 10℄ [1℄ 6 7 8 9 > xi[log(xi,10) < 0.5℄ # xi資料中對數值
<0.5的元素
[1℄ 1 2 3順伯的窩
第
頁
共
頁
> xi>5 #
資料邏輯
[1℄ FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
> xi[as.logi al((xi > 8) + (xi < 3))℄
[1℄ 1 2 9 10
#modifying subset of ve tor
> xi[log(xi,10) < 0.5℄ <- 2 > xi [1℄ 2 2 2 4 5 6 7 8 9 10
表
2:向量變數常用指令函數
指令
用法說明簡介
()建立向量或聯結不同的向量
length(x)算出資料
x的筆數
x[2℄ (i = 2)x
i
資料
x[-2℄ (i = 2) x資料中除了第
i筆資料
x[1:5℄ (k = 5) x資料的前
5筆資料
x[(length(x)-5):length(x) ℄ (k = 5) x資料
(前
5筆資料除外
) x[ (1,3,6)℄ (First, 3rd and 6th) x資料中的第
1,3,6筆資料
x[x>3℄ (the value is > 3) x資料中數值比
3大的資料
x[x < −2|x > 2]
x資料中數值比
2大或小於
-2的資料
whi h(x == max(x)) x資料中第幾筆數值為最大值
umax(x); umin(x)呈現
x資料中累積最大值
(最小值
)範例
5: R指令函數
> x = (45,43,46,48,51,46,50,47,4 6,45 ) # Entering data with
> x = (x,48,49,51,50,49) # append values to x
> x[16℄ = 41;x[17:20℄ = (40,38,35,40) # add to many spe ified indi es
> x # print x data
[1℄ 45 43 46 48 51 46 50 47 46 45 48 49 51 50 49 41 40 38 35 40
> ummax(x) # running maximum
[1℄ 45 45 46 48 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51
> ummin(x) # running minimum
[1℄ 45 43 43 43 43 43 43 43 43 43 43 43 43 43 43 41 40 38 35 35
範例
6:數值上的陷阱
1-0.9==0.1 R軟體中儘管
1可以被完美地精確表示
,而對
0.1和
0.9卻做不到。 使用函數
all.equal()來比較兩個數
,因為它包含一個可以指定數值容忍限的參變數。
> 1-0.9==0.1 [1℄ FALSE > all.equal(1.0-0.9,0.1,tol=1 0^(- 6))順伯的窩
第
頁
共
頁
[1℄ TRUE
> all.equal(pi,3.14159,tol=10 ^(-6 ))
[1℄ TRUE
> all.equal(pi,3.14159,tol=10 ^(-7 ))
[1℄ "Mean relative differen e: 8.446639e-07"
範例
7:數值的精密度
:formatC(x,digits =50)最高
50位
> options(digits=2) #參數內定小數位
7位
> 2^100 [1℄ 1.3e+30 > formatC(2^100,20) [1℄ "1.2676506002282294031e+3 0" > formatC(1-0.9,20) [1℄ "0.0999999999999999778" > formatC(0.1,20) [1℄ "0.10000000000000000555" #與數值
1-0.9不同
> formatC(2^0.00000000001/2^0 .000 0000 1,5) [1℄ " 1" > formatC(2^0.00000000001/2^0 .000 0000 1,10 ) [1℄ "0.9999999931" > 2^0.0000000000000001==2^0.0 0000 0000 0000 0000 0000 0000 0001 [1℄ TRUE #兩數相差值已小於數值精密度容忍度
(接受兩數相等
) > 2^0.000000000000001==2^0.00 0000 0000 0000 0000 0000 0000 001 [1℄ FALSE #兩數相差值尚未小於數值精密度容忍度
(不接受兩數相等
) 1.2練習題
1.輸入包含左右括號之字串
,請判斷是否配對正確
: (a)輸入
:((1+2)-3)*(4/5) (b)輸入
:(((1+2+3) ( )輸入
:((1+2)*(3+4)*(5+6))/(7+8) 2. R語言輸入下列指令
,預期輸出為何
? (a) 1:3^2 (b) (1:5)*2 ( ) var<-3; Var*2? (d) root.of.four <- sqrt(4) (e) x<-1; x< -1 (f) An even number <- 16 (g)下列
R輸出的結果中有兩個符號被遮住了
,是哪兩個符號
? > 2 + [1℄6順伯的窩
第
頁
共
頁
(h)
鍵入
TRUE + T +FALSE*F + T*FALSE +F ,輸出結果為何
? 3.用
R語言計算下列值
? (a)|2
3
− 3
2
|
值
? (b)e
e
( )(2.3)
8
+ ln(7.5) − cos(π/3)
4.用
R語言計算下列值
? (a)6!
值
? (b)組合數
C
52
5
( )log
10
π
值
5.用
R語言計算下列值
? (a)4
3
+ 3
2+1
=
? (b)p
(4 + 3)(2 + 1)
( )(
1 + 2
3 + 4
)
2
6.由螢幕輸入
x<-pi求列印出
π
小數點部份
(小數點後
10位
) 7.用
R語言輸入下列指令
,預期產生的值為何
? (a) 2+3*4 (b) 2/3/4 ( ) 2^3^4 8.在
R中輸入
>z= (0,0,0,2,0)後
,依序下列步驟
(a)輸入
>z[ (1,5)℄ <- 1預期
z產生的結果為何
? (b)輸入
>z[whi h.max(z)℄ <- 0預期
z產生的結果為何
? ( )輸入
>z[z==0℄ <- 8預期
z產生的結果為何
? 9.在
R中輸入下列指令後
,預期產生的輸出結果為何
? (a) (1,4)* (2,3) (b) (1:3)[any( (T,F,T))℄ ( ) (1:3)[all( (T,F,T))℄ (d) (T,T,F) (F,T,F)| (e) (T,T,F) | (F,T,F)| (f) n har( ("ab d","efg")) 10.用
sum()指令求
1 + 2 + 3 + · · · + 99 + 100
11.用
sum()指令求
1 +
1
2
+
1
3
+ · · · +
1
10
12.用
R語言計算求兩向量點積
[2, 5, 6, 7]
,[−1, 3, −1, −1]
順伯的窩
第
頁
共
頁
13.
資料
x:17 1620 2422 152115 1722 (a)如何找出資料
x的最大、 最小值
?(b)
若其中一筆資料
24為錯誤值
,如何更正為
18,並命名新變數為
newx ( )有哪幾筆資料超過
20,其資料為何
?總和為多少
?14.
若去年一年手機的通話費用
(美元
)為
46 333937 4630 483249 3530 48 (a)用
"bill為名
,建立資料
?用
sum指令求去年總通話費
?(b)
哪一月份費用最多
?哪一月份費用最少
? ( )哪一月份費用超過
40,其比率為多少
? 15.在
R軟体中
,使用下列指令
,預期其結果為何
? > x = (1,3,5,7,9) > y = (2,3,5,7,11,13) (a) x+1 (b) y*2 ( ) length(x)及
length(y) (d) x + y(e) sum(
x > 5
)及
sum(x[x > 5]
)(f) sum(
x > 5|x < 3
)符號
|
為
"'or, &為
"and (g)y[3]
(h)
y[−3]
(i)
y[x]
(What is NA?)(j)
y[y >= 7]
16.若在
R軟体中建立資料
x = (1, 8, 2,6, 3,8, 5,5, 5,5)並令
x
i
表示第
i
筆資料
,用指令完
成下列式子
(a)(x
1
+ x
2
+ · · · + x
10
)/10
,用
sum()指令
(b)求
log
10
x
i
, ∀i
, (用
log()指令
,內定基底為
e) ( )求
(x
i
− 4.4)/2.875, ∀i
, (用一次指令完成
) (d)求
x全距
,用
max()和
min()兩指令
17.
用
R語言計算
log 2 + log 3 + log 4 + · · · + log 9
值
?1.3
常用指令函數
s an():
實數資料可利用
"複製
,"張貼
快捷鍵 。
(字串或類別變數只能用
()指令或
paste()指令
)先將欲輸入的資料
(變數間隔為空格
)利用快捷鍵
"複製
起來
,於作業欄中輸入
範例
1: > x=s an()按
←֓
鍵
>1:"
張貼資料
''按
←֓
鍵
(完成
)函數
di(x):階差函數一般用法
di(x, lag= 2)若資料
x為數列
a
i
, i = 1, 2, 3, · · ·
則
di(x,lag =2)表數列
a
i+2
− a
i
, i = 1, 2, 3, · · ·
範例
2: > x= (1,1,2,3,5,8,13,21,34, 55,8 9) > diff(x,lag=2)[1℄ 1 2 3 5 8 13 21 34 55
若執行
diff(x)會出現怎樣的結果
?(
答
):01 12 3 58 1321 34函數
seq:數列函數一般用法
seq(from=, to=, by= )seq
函數表建立首項為
from,末項
to(≤
to值
),公差
by的數列。
範例
3: > seq(0,10,by=1) [1℄ 0 1 2 3 4 5 6 7 8 9 10 > seq(0,10,length=5) [1℄ 0.0 2.5 5.0 7.5 10.0 > seq(1, 9, by = pi) [1℄ 1.000000 4.141593 7.283185函數
rep:重複函數一般用法
rep(x, times)範例
4: > <-rep(1:4, 2) > [1℄ 1 2 3 4 1 2 3 4 > rep(1:4, ea h=2) [1℄ 1 1 2 2 3 3 4 4 > rep(1:4, (2,2,2,2)) [1℄ 1 1 2 2 3 3 4 4一些錯誤數值
: Finite, Innite and NaN Numbers範例
5: > a <- 0/0 > a [1℄ NaN > is.nan(a) [1℄ TRUE > b <- log(0) > b [1℄ -Inf > is.finite(b)順伯的窩
第
頁
共
頁
[1℄ FALSE
> x <- (0:4,NA,5:7)
> x
[1℄ 0 1 2 3 4 NA 5 6 7
> is.na(x)
[1℄ FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
> x[!is.na(x)℄ #
去除
NA(錯誤值
)的資料
(只留存正確數值資料
) [1℄ 0 1 2 3 4 5 6 7>x[!is.na(x)℄[x[!is.na(x) ℄>4. 5℄ #
符合數值資料
>4.5的資料
[1℄ 5 6 7字串資料
:文字字串資料要加上雙引號
"或單引號
' 'paste(..., ollapse="", sep ="")
其中參數
ollapse:用於分隔結果的可選字符串。
sep:用於分隔字串的符號串
範例
6: > A <- ("a","b"," ") > A [1℄ "a" "b" " " > paste("a","b",sep="") [1℄ "ab" > paste(A, ("d","e")) [1℄ "a d" "b e" " d"> paste(A, ("d","e"), ollaps e=", ",se p=", ")
[1℄ "a,d,b,e, ,d"
> paste(A, ("d","e"), ollaps e="" ,sep ="," )
[1℄ "a,db,e ,d"
> paste(A, ("d","e"), ollaps e="" ,sep ="")
[1℄ "adbe d"
> paste("$",sep="",A)
[1℄ "$a" "$b" "$ "
> paste(A,1:5,sep="")
[1℄ "a1" "b2" " 3" "a4" "b5"
> A <- ("a","b"," ","a","a"," " ,"B" );ta ble( A) #
字串資料統計表
Aa b B
3 1 1 2
矩
陣函數
:指令用法
matrix(data= NA, nrow =1, n ol =1, byrow =FALSE,dimnames =NULL)矩陣資料所有元素必須為同一屬性
,若有
"文字字串
及
"數值
資料
,則矩陣所有元素將被
視為
"字串
資料。
範例
7: > A <- matrix(1:20,4,5) > A [,1℄ [,2℄ [,3℄ [,4℄ [,5℄ [1,℄ 1 5 9 13 17 [2,℄ 2 6 10 14 18 [3,℄ 3 7 11 15 19 [4,℄ 4 8 12 16 20順伯的窩
第
頁
共
頁
>rownames(A)= ("r1","r2" ,"r3 ","r 4") #
設定矩陣列名稱
#也可用
dimnames(A)[[1℄℄= ("r1"," r2", "r3" ,"列名稱
")設定第
1維度
各行列名稱
> olnames(A)= (" 1"," 2" ," 3 "," 4"," 5") #設定矩陣行名稱
#也可用
dimnames(A)[[2℄℄= (" 1"," 2"," 3", " 4" ,"行名
" )設定第
2維
度各行列名稱
> A 1 2 3 4 5 r1 1 5 9 13 17 r2 2 6 10 14 18 r3 3 7 11 15 19 r4 4 8 12 16 20 #可用
dimnames(A)查看矩陣列、 行名稱
> A2 <- matrix(1:20,4,5,byrow = TRUE) > A2 [,1℄ [,2℄ [,3℄ [,4℄ [,5℄ [1,℄ 1 2 3 4 5 [2,℄ 6 7 8 9 10 [3,℄ 11 12 13 14 15 [4,℄ 16 17 18 19 20 > t(A) #矩
陣
A的
轉置矩陣
r1 r2 r3 r4 1 1 2 3 4 2 5 6 7 8 3 9 10 11 12 4 13 14 15 16 5 17 18 19 20> A3 <- matrix(1:20,5,4,byrow = TRUE) #
同
A^t > A3 [,1℄ [,2℄ [,3℄ [,4℄ [1,℄ 1 2 3 4 [2,℄ 5 6 7 8 [3,℄ 9 10 11 12 [4,℄ 13 14 15 16 [5,℄ 17 18 19 20> A[ (1,4), (2,3)℄ #subse tioning and modifying subse tion
2 3 #
保留
A矩陣的第
1,4列及第
2,3行的元素矩陣
r1 5 9 r4 8 12 > A[ (1,4), (2,3)℄ <- 0 #置換
A矩陣的第
1,4列及第
2,3行的元素
> A 1 2 3 4 5 r1 1 0 0 13 17 r2 2 6 10 14 18 r3 3 7 11 15 19 r4 4 0 0 16 20 > A[4,℄ # A矩陣的第
4列元素
[1℄ 4 1 1 16 20 > A[4,,drop = FALSE℄順伯的窩
第
頁
共
頁
1 2 3 4 5 r4 4 1 1 16 20 >A0 <- array(1:20,dim= (4,5)) > bind(A,A0) #
兩矩陣
A ,A0依照行結合
1 2 3 4 5 r1 1 0 0 13 17 1 5 9 13 17 r2 2 6 10 14 18 2 6 10 14 18 r3 3 7 11 15 19 3 7 11 15 19 r4 4 0 0 16 20 4 8 12 16 20 > rbind(A,A0) #兩矩陣
A ,A0依照列結合
1 2 3 4 5 r1 1 0 0 13 17 r2 2 6 10 14 18 r3 3 7 11 15 19 r4 4 0 0 16 20 1 5 9 13 17 2 6 10 14 18 3 7 11 15 19 4 8 12 16 20範例
8:矩陣運算
>A <- matrix(1:20,4,5) > t(A) # A的轉置矩陣
t(A) [,1℄ [,2℄ [,3℄ [,4℄ [1,℄ 1 2 3 4 [2,℄ 5 6 7 8 [3,℄ 9 10 11 12 [4,℄ 13 14 15 16 [5,℄ 17 18 19 20 > 2+A #矩陣
A元素增加常數值
[,1℄ [,2℄ [,3℄ [,4℄ [,5℄ [1,℄ 3 7 11 15 19 [2,℄ 4 8 12 16 20 [3,℄ 5 9 13 17 21 [4,℄ 6 10 14 18 22 > 2*A #矩陣
A常數積
[,1℄ [,2℄ [,3℄ [,4℄ [,5℄ [1,℄ 2 10 18 26 34 [2,℄ 4 12 20 28 36 [3,℄ 6 14 22 30 38 [4,℄ 8 16 24 32 40 > x <- 1:4 > A*x #矩
陣
A依照
x向量對應乘法。 有別於
%*%矩
陣乘法
(列行乘積和
) # Entry-wise multipli ation: x為長度
4的向量
,對應乘法為依照行依序乘以
x [,1℄ [,2℄ [,3℄ [,4℄ [,5℄ [1,℄ 1 5 9 13 17 [2,℄ 4 12 20 28 36順伯的窩
第
頁
共
頁
[3,℄ 9 21 33 45 57
[4,℄ 16 32 48 64 80
> A/x #Entry-wise division:
對應除法為依照行依序除以
x運算
[,1℄ [,2℄ [,3℄ [,4℄ [,5℄ [1,℄ 1 5.000000 9.000000 13 17.000000 [2,℄ 1 3.000000 5.000000 7 9.000000 [3,℄ 1 2.333333 3.666667 5 6.333333 [4,℄ 1 2.000000 3.000000 4 5.000000 > A <- matrix( (2,3,5,4),nrow=2,n ol= 2) > B <- matrix( (1,2,2,7),nrow=2,n ol= 2) > A [,1℄ [,2℄ [1,℄ 2 5 [2,℄ 3 4 > B [,1℄ [,2℄ [1,℄ 1 2 [2,℄ 2 7 > C <- A %*% B #
兩矩陣相乘用法
%*%有別於
*為
Entry-wise乘法
> C [,1℄ [,2℄ [1,℄ 12 39 [2,℄ 11 34 >det(C) #方陣
C的行列式值
[1℄ -21 > eigen(A) #矩
陣
A的特徵值
$values [1℄ 7 -1 $ve tors #矩
陣
A的特徵向量
#lambda=7
為
(-0.7071068,-0.7071068);la mbda =-1為
(-0.8574929,0.5144958)[,1℄ [,2℄ [1,℄ -0.7071068 -0.8574929 [2,℄ -0.7071068 0.5144958
範例
9:方陣
A
的逆矩陣
A
−1
=
solve(A)及解方程組
:AX = B
,X = A
−1
B
=solve(A,B) > A <- matrix( (2,3,5,4),nrow=2,n ol= 2) > B <- matrix( (1,2,2,7),nrow=2,n ol= 2) > A [,1℄ [,2℄ [1,℄ 2 5 [2,℄ 3 4 > B [,1℄ [,2℄ [1,℄ 1 2 [2,℄ 2 7 > solve(B) #B
−1
=
solve(B) [,1℄ [,2℄順伯的窩
第
頁
共
頁
[1,℄ 2.3333333 -0.6666667
[2,℄ -0.6666667 0.3333333
> rossprod(A,B) # t(A)%*%B # Cross produ t:
A
T
B
[,1℄ [,2℄
[1,℄ 8 25
[2,℄ 13 38
> C=A%*%B
> solve(A,C) # AB=C solve B=
A
−1
C
[,1℄ [,2℄
[1,℄ 1 2
[2,℄ 2 7
陣列
array函數
: array(data =NA, dim= length(data),dimnames = NULL)array
函數以
"逐行
的方式將
data填入陣列
,並持多維度的向量數據資料。
2維度的
array陣列等同於
matrix。
array陣列函數其列、
行名稱用法同
matrix用法。
範例
10: array() > x <- matrix(1:10, 2) > y <- array(1:10, (2, 5)) > identi al(x, y) [1℄ TRUE表
3: array變數常用指令函數
指令
用法說明簡介
rbind
、
bind、
array建立陣列
array變數
n ol、
nrow陣列的橫列數、 直行數
row、
olumn傳回元素所在的列指標或行指標值
rownames、
olnames查詢或更改橫列名稱、 直行名稱
dim查詢維度
dimnames查詢或設定各維度的行列名稱
aperm或
t()陣列轉置
;轉置矩陣
Data frames:
建立數據資料架構
(類似
Ex ele表
)。
R自動依序指派
1 ∼ n
作為列名。
指令
data.frame()容許建立變數屬性
(數值、 字串、 邏輯
)不同的資料框架
,相對於
ma-trix()所有元素為相同屬性。 在相同的資料下由
data.frame()建構的型態
,物件所需記憶
體大於
matrix()型態。 如果經常按名稱引用其列
,則數據框更方便。 數據框也可以更好地
用於報告
(列印
)表格信息
,因為您可以單獨將格式應用於每個列。 如果您計劃進行任何線
性代數類型的操作
,則矩陣
matrix()型態是必需的。
as.matrix():將數據框架變數轉成矩
陣資料型態。
as.data.frame():將矩陣資料型態轉成數據框架型態。
範例
11: > name <- ("john","peter","jenny") > gender <- fa tor( ("m","m","f")) > lass1 <- (60,60,80)順伯的窩
第
頁
共
頁
> lass2 <- (40,50,30)
> grades <- data.frame(name,gender, lass 1, l ass2 )
> grades
name gender lass1 lass2
1 john m 60 40 2 peter m 60 50 3 jenny f 80 30
資料框可用
$符號做欄位資料擷取後
,當成向量
,並使用做資料編輯。
> grades$gender #相當於取出矩陣資料
(所有元素同屬性
)中的第
2行元
素
[1℄ m m f Levels: f m範例
12:類別資料的建立
:調查一群人是否抽菸
,得到的回答為
Yes, No,No, Yes, Yes > x= ("Yes","No","No","Yes ","Y es")> x # print out values in x
[1℄ "Yes" "No" "No" "Yes" "Yes"
> table(x)
x
No Yes
2 3
> fa tor(x) # print out value in fa tor(x)
[1℄ Yes No No Yes Yes
Levels: No Yes
範例
13: > r1= (1,2,3) > r2= (4,5,6) > A1=rbind(r1,r2) > A1 [,1℄ [,2℄ [,3℄ r1 1 2 3 r2 4 5 6 > A2= bind(r1,r2) > A2 r1 r2 [1,℄ 1 4 [2,℄ 2 5 [3,℄ 3 6 > x <- 1:15 > x [1℄ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > dim(x) #查詢維度
NULL > dim(x) <- (5, 3) #宣告矩陣
x為
5列
3行
> x [,1℄ [,2℄ [,3℄順伯的窩
第
頁
共
頁
[1,℄ 1 6 11 [2,℄ 2 7 12 [3,℄ 3 8 13 [4,℄ 4 9 14 [5,℄ 5 10 15 > y=x[2:3, (1,3)℄ #
取出位於第
2,3列及第
1,3行的所有元素
> y [,1℄ [,2℄ [1,℄ 2 12 [2,℄ 3 13範例
14:編號
1,2,3,· · ·
,7的七位學生身高、 體重如下
:編號
身高
(in)體重
(lb) 1 68 155 2 61 99 3 63 115 4 70 205 5 69 170 6 65 125 7 72 220 >no= (seq(1:7));height= ( 68,6 1,63 ,70, 69,6 5,72 ); weight= (155,99,115,205,1 70,1 25,2 20); >A= bind(no,height,weight ) >A no height weight [1,℄ 1 68 155 [2,℄ 2 61 99 [3,℄ 3 63 115 [4,℄ 4 70 205 [5,℄ 5 69 170 [6,℄ 6 65 125 [7,℄ 7 72 220或
>no= (1,2,3,4,5,6,7); >height= (68,61,63,70,69,6 5,7 2); >weight= (155,99,115,205,1 70, 125, 220) ; >grade=data.frame(no,heigh t,w eigh t); >grade no height weight 1 1 68 155 2 2 61 99 3 3 63 115 4 4 70 205 5 5 69 170 6 6 65 125 7 7 72 220 > x=grade$height #取出資料檔中 變數為
height的資料
順伯的窩
第
頁
共
頁
> x [1℄ 68 61 63 70 69 65 72 > as.matrix(grade) # as.matrix():
將資料框架變數轉成矩陣資料型態
no height weight [1,℄ 1 68 155 [2,℄ 2 61 99 [3,℄ 3 63 115 [4,℄ 4 67 180 [5,℄ 5 69 170 [6,℄ 6 65 125 [7,℄ 7 72 220 > as.data.frame(A) # as.data.frame(A):將矩陣資料型態轉成資料框架變數
no height weight 1 1 68 155 2 2 61 99 3 3 63 115 4 4 70 205 5 5 69 170 6 6 65 125 7 7 72 220 > A[4,℄= (4,67,180) #修改第
4列所有元素資料
> A no height weight [1,℄ 1 68 155 [2,℄ 2 61 99 [3,℄ 3 63 115 [4,℄ 4 67 180 [5,℄ 5 69 170 [6,℄ 6 65 125 [7,℄ 7 72 220 > sum(A[,2℄)/length(A[,2℄) #求身高平均值
[1℄ 66.42857 > A[order(A[,3℄),℄ #依照行
3變數排序
no height weight [1,℄ 2 61 99 [2,℄ 3 63 115 [3,℄ 6 65 125 [4,℄ 1 68 155 [5,℄ 5 69 170 [6,℄ 4 67 180 [7,℄ 7 72 220 > whi h(A[,2℄>=68) #查問行
2變數
>=68有哪幾筆
[1℄ 1 5 7 > A[A[,2℄>=68,℄ #保留行
2變數
>=68的矩陣
no height weight [1,℄ 1 68 155 [2,℄ 5 69 170 [3,℄ 7 72 220順伯的窩
第
頁
共
頁
範例
15: > r1= ("a","b");r2= (3,4);A=r bind (r1, r2) > A [,1℄ [,2℄ r1 "a" "b" r2 "3" "4 #矩
陣資料所有元素必須同一屬性
> r1= (1,2);r2= (3,4);A=rbind (r1, r2) > A [,1℄ [,2℄ r1 1 2 r2 3 4 >r1= (1,2);r2= (3,4);Y= b ind( r1,r 2) > Y r1 r2 [1,℄ 1 3 [2,℄ 2 4 > A%*%Y # AY矩陣乘積
r1 r2 r1 5 11 r2 11 25 > Y%*%A # YA矩
陣乘積
[,1℄ [,2℄ [1,℄ 10 14 [2,℄ 14 20 > solve(A) #矩
陣
A的逆矩陣
r1 r2 [1,℄ -2.0 1.0 [2,℄ 1.5 -0.5 > det(A) #矩陣
A的行列式值
[1℄ -2 > solve(A,Y) #解矩陣
AX=Y ,求出
x矩
陣
r1 r2 [1,℄ 0.0 -2.0 [2,℄ 0.5 2.5 1.3練習題
1.如何得到輸出結果如下
: >X [,1℄ [,2℄ [,3℄ [1,℄ 1 5 9 [2,℄ 2 6 10 [3,℄ 3 7 11 [4,℄ 4 8 12 2.用
di()指令找出數列
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89
的一階差及二階差數列
? 3.您在您的汽車加滿油並記錄了最近八次里程數
:65311 65624 65908 66219 66499 6682167145 67447順伯的窩
第
頁
共
頁
輸入這些數據資料並命名為
"gas,對數據使用函數
di()會輸出什麼
?解釋這兩個命令返回
的內容
:mean(gas)和
mean(di(gas))。
4.用
R語言造出以下數列
:(a)
用
rep指令造出以下數列
:1 11 1 12 22 2 33 3 44 5(b)
用
seq指令造出以下數列
:12 3 45 62 3 45 6 34 5 64 56 5 66( )
用
rep指令造出以下數列
: "A" "A" "A" "A" "A" "B" "B" "B" "B" "C" "C" "C" "D" "D" "E"(d)
用
, rep指令造出以下數列
:"
東
" "東
" "東
" "東
" "西
" "西
" "西
" "南
" "南
" "北
" (e)用
, seq, letters指令造出以下數列
:"b" "d" "f" "h" "j" "l" "n" "p" "r" "t" "v" "x" "z" "a" " " "e" "g" "i" "k" "m"
"o" "q" "s" "u" "w" "y"
(f)
產生數列
1, −
1
2
,
1
3
, −
1
4
, · · · , −
1
10
5.用
R語言造出以下數列
:(a) "a" , "a" , "a" , "a", "a" .
(b)
1 ∼ 100
的奇數
( ) 1,2, 3,4, 5, 4,3,2, 1 6.用
R語言
seq()指令
(a)造出首項為
3,公差為
2的等差數列
50項
? (b)輸入
seq(50,from=3,by=2 ) ,預期輸出的結果如何
?共幾項
( )輸入指令
seq(1,100,length=30) ,預期輸出的結果如何
? (d)分別輸入指令
seq(1,10,by=0.7);seq(10,1 ,by= -0.7 ) ,得到的最大值與最小值為何
? 7.用
s an()指令造出下列
"數列
:(實數資料利用
"複製
,"張貼
快捷鍵
) (a) 1 23 12 3 12 3 (b) 10.0000010.0454510.0909110.1363610.1818210.2272710.2727310.3181810.36364 10.4090910.4545510.50000 8.造出下列
"數列
:(a) "1" "2" "3" "banana" "1" "2" "3" "banana"
(b)
用
paste指令造出
: "A1" "A2""A3" "B1" "B2""C1" "C2" "C3" "C4" "D1""D2" "E1"( )
用
paste指令造出
:"student_1" "student_2" "student_3" "student_4" "student_5" 9.在
R中鍵入下列指令
,會輸出什麼結果
?(a) paste( ("a","b"), (" ","d") , ol laps e=" ",se p="" )
(b) strsplit( ("ab; d"),";")
( ) strsplit( ("ab; d"),";")
(d) substring("ab def",3, (3,5, 4))
10.
您可以追踪兩週
(十天
)的上學通勤時間
,並以分鐘為單位記錄以下時間
:171620 242215 21 15 1722(a)
使用函數
max()查找最長的通勤時間
,函數
mean()找到平均值
,函數
min()找到最小
值。
(b)
若
24是個錯誤。 應該是
18 ,你怎麼能解決這個問題
?然後找到新的平均值為多少
? ( )你上學
20分鐘或更長時間有幾次
?你的通勤時間百分之多少是少於
18分鐘
?11.
建立一資料格式
(data frame)名稱為
s ore具有以下三變數名稱
(資料
):number(編號
:1∼
10
),grade(等級
:A,B,Cor F(不合格
)),pass(通過
:Yes,No),12.
學生對教師的評價為
1-5等級。 假設此表中給出了對前三個問題的答案
: Student Ques. 1 Ques. 2 Ques. 31 3 5 1 2 3 2 3 3 3 5 1 4 4 5 1 5 3 2 1 6 4 2 3 7 3 5 1 8 4 5 1 9 3 4 1 10 4 2 1
使用
(),s a() ,或
read.table()輸入數據
13.在
R中輸入下列指令後
,預期產生的輸出結果為何
? (a) >matrix(1:2,n ol=2,nrow=2)(b) >Mat<-matrix(1:12,nrow=4,by row= TRUE );M at[3 ,℄;M at[2 ,2:3 ℄
( ) matrix( (1,0,0,1),nrow=2)*m atri x(1: 4,n row= 2)
14.
給出指令以創建
3階單位矩陣
?15.
如何用
1 : 10
替換以下列表的第四個組件
?L<-list(12, (34,67),Mat,1: 15,l ist (10, 11)) (a) L[[2℄℄[2℄會輸出什麼
?16.
如何檢索
data.frame資料物件行和列的名稱
?(註
:Matrix物件所有元素必須同屬性。 用
dim-names(x)檢索查詢
)17.
若
> xname gender weight
1 Ja k m 80
2 Julia f 60
> y
name eyes height
1 Ja k blue 180
2 Julia green 160
如何結合這兩個表格資料
? 18.給出指令以計算矩陣
x的所有元素
(每列的所有元素
)的乘積數值
? 19.輸入以下矩陣並命名為
my.matmy.mat =
1
2
3
4
5
6
7
8
9
10 11 12
(a)
用
matrix指令造出矩陣
my.mat(b)
用
dimnames指令設定各列名稱
:"編號
","科目
1","科目
2";行名稱
:"學生
1","學生
2","學
生
3"( )
用
rownames指令設定橫列名稱
:"r1","r2", "r3","r4" (d)用
olnames指令設定行名稱
:" ol1"," ol2"," ol3"(e)
將資料
my.mat的列
(row)命名為
no.1,no.2, no.3, no.4,將欄
( olumn)命名為
var.1, var.2, var.3。
20.輸入以下矩陣
A =
12 10 7 11
4
8
2
1
6
9
3
5
(a)用
matrix , (4,8,2,1,12,10,7,11,6,9,3,5)指令
,建立矩陣
A (b)用
order指令將第
3行排序後
(由小到大
),把資料矩陣依第
3行 的大小來排序
21.矩陣
m =
1 1 2
2 2 1
3 3 3
,依序完成下列指令或輸出的結果為何
? (a) >m[2,℄ (b) >m[ (1,3),℄ ( ) m[- (1,3),3℄ (d) > whi h(m == 1)(e) > whi h(m == 1,arr.ind=TRUE)
(f)
將矩陣
m中非
2的元素全部更改為
022.
給出
R指令
,輸出下表中所有女性的體重和身高
?> X
weight height gender
1 79 163 M 2 90 163 F 3 87 198 M 4 63 164 F 5 90 168 F 6 71 178 F
順伯的窩
第
頁
共
頁
7 58 191 M 8 80 194 F 9 91 185 F 10 89 176 M 23.
若
A =
1 2 3 2
2 1 6 4
4 7 2 5
,B =
1 3 5 2
0 1 3 4
2 4 7 3
1 5 1 2
求
AB
−1
及
BA
T
24.某班考試成績和性別紀錄如下
(資料是依照學生座號
1、
2、
3、
· · ·
依序紀錄
;NA代表缺考
):成績
: 70,45, 85,NA, 50,NA, 68, 85,55,35,0, 75性別
: m, f, f, m,f, m, f, m,f, f, f, m (a)用
rbind指令建立一
2維資料
(2列矩陣
:用
1表
m,0表
f) (b)本班共有多少學生
?男女生各多少人
? ( )考試成績最高分及最低分是幾分
? (d)考試成績及格
(≥ 60
分
)的座號
?共有幾人及格
? (e)男女成績平均各是多少
? 25. 10位學生的期中考及期末考成績
(依座號
1,2,3,· · ·
,10)其中
NA表缺考
,如下
:期中考
:70,80,67,54,88,64,NA,73,90,74期末考
:83,88,73,72,80,67,56,81,87,79(a)
建立一
2維資料
(列名稱分別
"期中考
,"期末考
,行名稱分別為座號
"no_1'',"no_2'',· · ·
,"no_10'') (b)求期中考平均成績
?( )
若座號
7號學生的期中考補考成績為
54,請補登錄該學生成績
?(d)
若學期成績計算方式為期中考佔
40%
,期末考佔
60%
,計算每位學生的學期成績
?找出
哪幾位學生學期成績不及格
?找出哪幾位學生學期成績
80分以上
?26.
用
data.frame指令建立數據資料
"stuData其中學生
ID:1,2,3,4,5。 學生名
name依序為
:"小
明
","大雄
","胖虎
","小新
","大白
"。
考試成績
s ore依序為
:80,60,90,70,50 27.調查小汽車乘客人數是否繫安全帶數據資料
,用
data.frame指令建立資料
" ar.dat。
其中乘客人數
passengers:24 0 11 2 31 00 3 21 2 10 21 1 20 0 13 22 3 10 3是否繫安全帶
seatbelt:"Y","N","Y","Y","Y","Y","Y","Y","Y","Y","N","Y","Y", "Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","N","Y","Y","Y","Y" 28.若矩陣
X =
1 68
1 61
1 63
1 70
1 69
1 65
1 72
;x
變數
:168,61,63,70,69,65,72。
Y
變數
:155,99,115,205,170,125,220 (a)用
bind指令
,建立
X矩陣
順伯的窩
第
頁
共
頁
(b)
若矩陣乘積
(X
t
X)B = X
t
Y
,
用
solve指令及矩陣運算解出
B矩陣
?29.
任意輸入兩數值
a,b後
,並從螢幕列印出
"您輸入
a,b值各為
?"並顯示出
a + b =
的值
?1.4
讀存取
R資料檔或外部資料檔
讀存取
R軟體的資料格式
:rda檔
載入
R資料檔
load("le.rda")將物件儲存
rdata檔
: save.image("le.rda")使用資料框架函式
read.table()或
read. sv()讀入或輸入外部資料檔案
,最容易。 直接讀取整個
外部檔案進入資料框架
,外部檔案常常要求有特定的格式
,例如
1. ASCII形式的檔案
,多數檔編輯器
,資料庫
,試算表等軟體可以存取
2.
第一的列
(行
) (line, row)可以有該資料各個變數的
變數名稱
(variablenames)或是
â列的
名字
( olumnname)3.
其餘的列
(line, row),是各個變數的值
.4.
資料之間是空格分開
,或其他特定符號
(逗號
,Tab)分隔
. 5.資料是文字類型
,通常以雙引號
"形式
6.
以
â,â分開變數值的
ASCII形式檔案
,一般成為
omma-separated-variableformat,檔案名
通常以
. sv作為延伸檔名
,7.
第一欄
( olumn)有時候是
â列標籤
(rowlabel)或是
â列的名字
(rowname)讀取資料檔技巧
: 1.在你要讀入
R語言前務必先看過資料檔格式
,再決定用哪種命令函數讀取資料檔。
2.注意資料是否有 「欄位名稱」
,分隔符號是什麼
? 3.要注意輸入的符號是前斜線
"/
還是後斜線
"\
4.在你的作業系統中資料可否利用
"複製
Ctrl+
C,"張貼
Ctrl+
V功能
,如果可以的話
,用
s an()指令是個不錯的選擇 。
資料或分析結果
,輸出至外部檔案
,供其他軟體使用
,主要 使用資料框架函式
write.table(),相對
應
read.table(),輸出資料
(資料框架或矩陣
)至外部資料檔案
,最容易
.對大型資料
,可以使用
MASS套件中的
write.matrix()會較有效率
. R內建的鳶尾花
(iris)資料集是非常著名的生物資訊資料集之一
,取自美國加州大學歐文分校的機
械學習資料庫
http://ar hive.i s.u i.edu/ml/datasets/Iris,資料的筆數為
150筆
,共有五個欄位
: 1.花萼長度
(Sepal Length):計算單位是公分。
2.花萼寬度
(Sepal Width):計算單位是公分。
3.花瓣長度
(Petal Length):計算單位是公分。
4.花瓣寬度
(Petal Width):計算單位是公分。
5.
類別
(Class):可分為
Setosa,Versi olor和
Virgini a三個品種。
讀取
ASCII表格形式的資料
:利用
read.table讀檔
,write.table為輸出檔案
read.table(file, header = TRUE, sep = ",", quote = "\"", de = ".",
fill = TRUE, omment. har = "", ...)#
讀取
txt,data資料檔
write.table(x, "myNewData.txt",append=FAL SE, quote=FALSE, sep="\t")#匯出
txt資料檔
write.table()可以匯出資料成為
txt或是
sv格式到指定的目錄
read.table適合讀取表格資料
,但較不適合讀取大型矩陣資料檔
,欲讀取大量矩陣資料可用指令
"s an取代。
•
le=資料名稱
•
header=資料開頭是否有變數名稱
,預設值
=TRUE•
sep =資料分隔符號
,如果是
sep=" ",表示分隔為空白鍵或
Tab("\t'')做區隔
•
quote =資料中的字串符號
,quote=" "代表關閉此功能
•
de =資料是否含小數點或分號。
â.â為實數的小數點。
•
ll=每一列資料長度是否不同
,預設值
=TRUE•
omment. har =預設值
" "代表關閉
omment•
row.names = NULL表示第一欄無列標籤
•
append=首列
header line預設值為
False資料檔變數之間為
"空白分隔或
Tab分隔的
le.txt檔
sepal_length sepal_width petal_length petal_width iris
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
資料檔變數之間為
",分隔的
le.txt或
le. sv檔
sepal length,sepal width,petal length,petal width,iris
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5,3.6,1.4,0.2,Iris-setosa
順伯的窩
第
頁
共
頁
read.table("d:/math work/data/iris.txt",sep=" ",he ader =T,s kip= 0) #
空白
read.table("d:/math work/data/iris_tab.txt",s ep=" \t", head er=T ,ski p=0 )#Ta b
隔
read.table("d:/math work/data/iris_ sv.txt",s ep=" ,",h eade r=T, skip =0) #逗號
read.table("d:/math work/data/iris.data",sep= ",") #逗號
write.table(x,"d:/myNewDa ta.t xt", appe nd=F ALSE ,quo te=F ALSE ,sep ="," )#
匯出資料
write.table(x,"myNewData. sv" ,sep ="," ,row .nam es = FALSE) #匯出
sv資料檔
讀取檔案較大的
sv資料
:若格式檔為
. sv,變數間以
sep=",做區隔則用指令
read. sv()來讀取資
料
read. sv(file,header = TRUE, sep = ",", quote = "\"",de = ".",
fill = TRUE, omment. har = "", ...)#
讀取
le. sv資料檔
write. sv(x,"myNewData. s v",r ow.n ames = FALSE)#匯出
sv資料檔
相當於
write.table(x,"myNewData. s v",s ep=" ,",r ow.n ames = FALSE)#匯出
sv資
料檔
執行
write. sv()時
,不需要指定分隔的符號
,在重新讀取時
,也不需要刻意指定
,仍然可以匯入
正確的資料。
read. sv("d:/math work/data/iris. sv",header =T,s kip= 0)
讀取向量資料檔
s an(): s an()可以讀取向量型態的外部資料
,但是無法讀取表格
,是一個處理簡
單資料的指令。 適合矩陣形式資料
(同屬性
)s an(file="",what=double( ),nm ax=- 1,n= -1,s ep=" ",de =". ",sk ip=0 , om men t. h ar=" ",.. .)
tips:
若可以將要輸入的資料
Ctrl+C複製好
,則在
RStudio作業平台輸入
>x=s an()再
Crtl+V
貼上資料即可。
•
le:資料檔案位址路徑名稱
•
what =double()資料兩倍精密度
•
nmax設定最多讀入多少個數值
,-1表無限制。
•
n設定讀入多少個數值。
-1表無限制。
•
sep =資料之間分隔符號
,如果是
sep=" ",表示分隔為空白鍵或
Tab("\t'')做區隔。
預設為空格或換行符號。
•
de =資料是否含小數點或分號。
•
skip=前幾列資料不讀入。
•
omment. har =預設值
" "代表關閉
omment資料檔
ex1.txt如右
:年齡
薪水
(
萬元
)
30 3.2
28 2.5
40 3.4
32 2.8
45 3.6
28 2.2
36 4
42 4.5
58 4.8
50 4.6
> x=s an("d:/math work/data/ex1.txt",skip=0)Error in s an("d:/math work/data/ex1.txt", skip = 0) :
s an() expe ted 'a real', got '
年齡
'資料的第一列為
"行變數名稱
與底下數值資料不同屬性
,因此我們必須放棄讀取第一列
,才能把
數值資料讀入
>x=s an("d:/math work/data/ex1.txt",skip=1) Read 20 items [1℄ 30.0 3.2 28.0 2.5 40.0 3.4 32.0 2.8 45.0 3.6 [11℄ 28.0 2.2 36.0 4.0 42.0 4.5 58.0 4.8 50.0 4.6所讀入資料為
1維向量資料
,我們再把資料結構調整為
10 × 2
矩陣
,並輸入
"行變數名稱
> ex1=matrix(x, (10,2),byrow= T) > olnames(ex1)= ("年齡
","薪水
(萬元
)") > ex1年齡 薪水
(萬元
) [1,℄ 30 3.2 [2,℄ 28 2.5 [3,℄ 40 3.4 [4,℄ 32 2.8 [5,℄ 45 3.6 [6,℄ 28 2.2 [7,℄ 36 4.0 [8,℄ 42 4.5 [9,℄ 58 4.8 [10,℄ 50 4.6若資料檔
ex1.txt內變數間的分隔符號為
",或
Tab則我們將
sep參數設定為
sep=",''或
sep="\t''來讀入資料
x=s an("d:/math work/data/ex1.txt",sep=",", skip =1)
x=s an("d:/math work/data/ex1",sep="\t",ski p=1)
下載安裝套件
: install.pa kages("pa kage") R軟體安裝後
,安裝目錄會有基本套件
(Pa kages)。
若欲使用非基本套件中的某函數功能
,必
須先在程式中使用
library()函數來載入套件。 基本套件
(無須載入
)有
: 1. datasets:基本範例資料檔
(Iris) 2. grDevi xs:圖形裝置套件
3. graphi s基本圖形套件
4. grid:grid圖形版面設定套件
5. method:R物件使用方法及類別
6. stats:統計函數套件
7. stats4:使用
S4 lass物件導向方式所寫的統計套件
8. t ltk:與
T l/Tk圖形介面語言溝通的工具套件
9. tools:管理與程式開發有關的工具套件
10. utils:其他常用工具函數
在
Windows GUI圖形介面中
,可從
p
程式套件
y
⇒ p
安裝程式套件
y
選單執行套件安裝。
R軟體會要求選擇儲存
R軟體的
CRAN鏡射網站位置
, "Taiwan(Taipeh),再選擇自己要安裝
的套件名稱
,R軟體即會從
CRAN鏡射網站抓取相關的套件安裝在電腦之中。 我們也可以自行
從作業系統中安裝非基本套件
,語法為
install.pa kages("pa kage")只需安裝一次就行。
有用的套件
(Pa kage) 1. gdata套件
:讀存取外部資料檔工具
2. splines套件
:回歸分析線性函數及類別功能
3. mosai套件
:統計與數學工具
4. rootSolve套件
:求方程式近似根
,微分方程式
5. dplyr套件
:處理數據資料時
,基本數據套件。 特別適用於按類別資料數據。
6. ggplot2:用於製作漂亮圖形的著名包裝。
ggplot2允許您使用圖形語法來構建分層的
,可
自定義的繪圖。
7. ggmap:
直接從
Google地圖下載街道地圖
,並將其用作
ggplots中的背景。
(For Spatial data) 8. MLR:Python在
R之前飆升的最大原因之一是它的機器學習重點庫
(如
s ikit-learn),然後
MLR包
,它允許我們執行各種機器學習任務。
MLR包括我們在項目中使用的所有
流行的機器學習算法。
9.· · ·
查詢已載入套件
:library()查看自己電腦內已安裝哪些套件
載入套件
:在
R軟體中每次執行非基本安裝套件
(Pa kage)時需載入
,使用
library("pa kage")來
載入套件
讀取
Ex el檔
:最穩定的辦法還是轉成
sv檔
,利用
read.table()讀入資料。 要讀取
Mi rosoftEx el資料首先必須載入套件
"gdata。
install.pa kages("gdata",repos="http:// ran.us.r-proje t.org")
library(gdata);read.xls("ex elle.xls",sheet = 1,header =TRUE)
若資料儲存為
Mi rosoft Ex el檔
>install.pa kages("gdata" ,rep os=" http :// ran. us.r -pro je t .org ") #
首次
安裝套件後
,重新執行
R-studio >library(gdata)>x=read.xls("d:/math work/data/Iris.xls") # 2007
年後
Mi rosoft Ex el檔
則為
"iris.xlsx'' > xsepal.length sepal.width petal.length petal.width iris
1 5.1 3.5 1.4 0.2 Iris-setosa
2 4.9 3.0 1.4 0.2 Iris-setosa
3 4.7 3.2 1.3 0.2 Iris-setosa
4 4.6 3.1 1.5 0.2 Iris-setosa
5 5.0 3.6 1.4 0.2 Iris-setosa
注意資料儲存之編碼為
Big5、
Utf-8、
ANCI或其它。 重新儲存資料檔、 編碼為
Utf-8。 使用合適
的編碼參數
: read.table(âdata.txtâ, en oding="an i") read.table("test.utf8", sep = ",", header=TRUE, leEn oding ="UTF-8")library():
查詢電腦已安裝可用的套件名稱
data():查詢可用的資料檔名稱
R語言基本安裝後包含幾個基本的資料檔可供利用
,"AirPassengers," ars,"faithful,"iris,"trees ,· · ·
等。 如欲進一步查詢資料檔的說明可用
help(dataname)指令查看。
>data(iris) #引入
"iris資料檔
>help(iris) #查看
"iris資料檔的說明
(資料來源
,格式
,變數
,...等
) 1.4練習題
1.通常的數據讀取函數之一採用以下參數
:header,sep,de ,row.names,skip,nrows。
解釋他們的目
的。
2.
讀入資料檔
"possum. sv ,並查看有哪些變數
?如何查看
"sex為
f的
"totlngth變數資料
3.比較指令函數
s an()與
read.table()兩者差異
?4.
說明如何從
Ex el電子檔表格輸入數據資料
?5.
從網址
http://www.biostatisti ien .eu/ spri ngeR /Wei ght_ birt h.xl s下載資料檔
"Weight_birth.xls``然後讀入
R軟體
,並命名為
x物件資料。
1.5
作圖函數
plot()函數
: R中繪製任何內容的最常用函數是
plot()函數。 這是一個通用函數
,可用於散點圖
,時
間序列圖
,函數圖等。
如果給予單個向量資料
,則在
y軸上對該行繪製值數字或索引。 如果給出兩個相同長度向量資
料
,則產生雙變量散佈圖。
urve()函數
:要在指定的值範圍內繪製連續函數
,可以使用
urve()函數。
urve(expr, from, to,add = FALSE, ...)
> urve(sin(x), from = 0, to = 2*pi)
>abline(7,2, ol="green") # y=7+2x ,h=*, v=*
我們可以在圖形視窗中添加幾個不同的功能。 要添加點
,我們使用
points()指令 。 要添加一條
直線
,可以使用
abline()函數。 線條函數用於添加更多一般線條。 它繪製了指定的點
,並用直線
連接它們。 類似於在繪圖函數中添加參數
type =l。 參數
add = TRUE,曲線將添加到圖形
中
points()函數
:在已經繪圖圖中增加點
,可以使用
points(x,y)函數
,(x, y)
為向量。
在函數添加參數
type=b為顯示點位置
,點與點間以直線連接。
type=l為點與點以直線連
接
,不顯示點位置。
表
4:作圖常用指令函數
指令
用法說明簡介
abline()增畫一直線
(給予斜率
,y截距
)、 鉛直線或水平線
arrows()坐標增加一方向箭頭
lines()連接兩點的線
points()增畫點坐標位置
spline()在資料點間內插方法
(平滑曲線連接
) rug()在
x
坐標軸增劃標記
segments()增劃割線
(同
lines() ) text()在圖形中增添文字
title()圖形標題
,次標題等
範例
1: > urve(sin(x), from = 0, to = 2*pi, ol=2,lty=1)> points(x,sin(x),type="b", p h= 19 o l=1, lty= 2)
> points(spline(x,sin(x)),t ype= "b", p h= 4)
> urve(sin(x), from = 0, to = 2*pi, ol=2,lty=1) #
函數關係作圖
> x= (seq(from=0,to=2*pi,by =0.5 ))> points(x,sin(x),type="b", p h= 19, ol=1 ,lty =2) #
點與點連接折線
> points(spline(x,sin(x)),t ype= "b", p h= 4, o l=3, lty= 3) #點與點平滑曲
線
> legend(4, 0.5, legend= (" urve", "points","spline"),
ol= ("red", "bla k","green"), lty=1:3, ex=2) #
圖例說明
>abline(h=0, ol="blue") #水平直線
y=00
1
2
3
4
5
6
−1.0
−0.5
0.0
0.5
1.0
x
sin(x)
curve
points
spline
圖
1:曲線作圖、 點描法與平滑內插曲線
作圖參數
:。
ol:用於設定默認的繪圖顏色
lty:直線類型。 參數的值可以為整數
:0為空
,1為實線
(預設
值
),2為虛線
,3為點線
p h:設置點的類型
ex:設置文本和符合的尺度
p h:設置點的類
型
> par(mfrow = (2, 2)) #圖形以
2x2格輸出
> par(lend = 1) #設置線結束端的形狀
1="butt" > par(bg = " ornsilk") #作圖背景顏色設定
> par(xlog = TRUE) # x軸是否設為對數單位
範例
2:汽車行駛哩數與輪胎胎面磨損數據如下
: mileage 0 4 8 12 16 20 24 28 32 tread wear 394 329 291 255 229 204 179 163 150若已知其回歸線截距
360,斜率
−7.3
,有三種方法可在其散佈圖增畫回歸線
> miles = (0:8)*4 # 0 4 8 ... 32 > tread = s an() 1: 394 329 291 255 229 204 179 163 150 10: Read 9 items> plot(miles,tread) # make the s atterplot
>abline(lm(tread ~ miles))
## or as we know the inter ept and slope
> abline(360,-7.3) ## or using points > points(miles,360 - 7.3*miles,type="l") ## or using lines > lines(miles,360 - 7.3*miles) ## or using urve
> urve(360 - 7.3*x,add=T) # add a fun tion of x
0
5
10
15
20
25
30
150
200
250
300
350
400
miles
tread
0
5
10
15
20
25
30
150
200
250
300
350
400
miles
tread
圖
2:在圖中增加一直線
範例
3:在圖中增添文字
data(mammals) atta h(mammals) names(mammals) #資料的變數名稱
plot(body,brain,p h=16,xl ab= "Bod y weight (kg)", ylab="Brain weight (g)",
xlim= (0,280), ylim= (0,1350)) # xlim ylim
限制作圖範圍
text(x=body[ (21,32,56,36 )℄, y=br ain[ (21 ,32, 56,3 6)℄,labels=X[ (21,32,56,36)℄,po s=4) # pos
文字位置
1下
2左
3上
4右方
deta h(mammals)0
50
100
150
200
250
0
200
400
600
800
1000
1200
1400
Body weight (kg)
Br
ain w
eight (g)
0
50
100
150
200
250
0
200
400
600
800
1000
1200
1400
Body weight (kg)
Br
ain w
eight (g)
Donkey
Human
Pig
Kangaroo
圖
3:在圖中增加文字
範例
4:作圖點符號、 大小與顏色選擇
>plot(1,1,xlim= (1,7.5),yl im= (1. 75,5 ),ty pe=" n",a xes= F,xl ab=" ",yl ab=" ") #
不
作圖點
>box() #
圖框格
>points(1:7, rep(4.5, 7), ex=1:7, ol=1:7, p h=0:6) #
點型式
p h0~6 >text(1:7,rep(3.5, 7), labels=paste(0:6), ex=1:7, ol=1:7) #張貼文字
0~6>points(1:7,rep(2.5,7), p h=(0:6)+7) #
點型式
p h7~13>text((1:7), rep(2.5,7), paste((0:6)+7), pos=4) #
張貼文字
7~13 >points(1:7,rep(2,7), p h=(0:6)+14) #點型式
p h14~20>text((1:7), rep(2,7), paste((0:6)+14), pos=4) #
張貼文字
14~200
1
2
3
4
5
6
6
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0
1
2
3
4
5
6
圖
4:圖形中不同的點符號與大小
view. olours <- fun tion(){plot(1, 1, xlim= (0,14), ylim= (0,3), type="n", axes=F,
xlab="",ylab="")
text(1:6, rep(2.5,6), paste(1:6), ol=palette()[1:6℄, ex=2.5)
text(10, 2.5, "Default palette", adj=0)
rain hars <- ("R","O","Y","G","B","I"," V")
text(1:7, rep(1.5,7), rain hars, ol=rainbow(7), ex=2.5)
text(10, 1.5, "rainbow(7)", adj=0)
mtxt <- substring(" m. olors", 1:9,1:9)
# Split â m. olorsâ into its 9 hara ters
text(1:9, rep(0.5,9), mtxt, ol= m. olors(9), ex=3)
text(10, 0.5, " m. olors(9)", adj=0)
} box() view. olours() 1.5
練習題
1.假設您使用命令曲線
curve(cos(x))
繪製了一個繪圖。 您將使用哪條
R指令將此圖作為
PDF保存在名為
myplot.pdf的文件中
? 2.詳細說明該指令的效果
par(mfrow= (3,2)) 3.說明指令
layout()功能用於什麼
? 4.您將使用哪個命令將散點圖添加到預先存在的繪圖中
?順伯的窩
第
頁
共
頁
1
2
3
4
5
6
Default palette
R
O
Y
G
B
I
V
rainbow(7)
c
m
.
c
o
l
o
r
s
cm.colors(9)
圖
5:圖形中不同的顏色
lty=1
lwd=2
lty=2
lwd=2
lty=3
lty=3
lwd=2
lty=4
lwd=2
lty=5
lwd=2
lty=6
lwd=2
font=1 plain
cex=1
font=2 bold
cex=2
font=3 italic
font=4 bold italic
cex=3
φοντ=5
symbol
Line type & Fonts family
圖
6:線型式與粗細大小
5.
您將使用函數
plot()的哪個參數來設定點之間連接線段
? 6.繪製一個直線的指令函數是什麼
? 7.您將使用哪個參數來管理繪圖中的顏色設定
? 8.給出顯示圖像的指令函數
,其值以矩陣
X輸出
,您將使用哪個功能來顯示圖像
?以使輸出與控
制台中顯示
X的方式一致。
9.您將使用哪個指令函數在繪圖中添加文字
? 10.您可以使用哪個函數指令
,通過單擊鼠標來查找繪圖中點的坐標
? 11.詳細解釋指令
par(ask=TRUE)的效果
?12.