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) #字串資料統計表
A
>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維
> A2 <- matrix(1:20,4,5,byrow = TRUE)
> A2
> A3 <- matrix(1:20,5,4,byrow = TRUE) #同 A^t
> A3
> A[ (1,4), (2,3)℄ #subse tioning and modifying subse tion
2 3 #保留 A 矩陣的第1,4列及第2,3行的元素矩陣
> A[4,,drop = FALSE℄
順伯的窩 第 頁 共 頁
1 2 3 4 5
[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
#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.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
> 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
[1,℄ 1 6 11
>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 )
>weight= (155,99,115,205,1 70, 125, 220) ;
>grade=data.frame(no,heigh t,w eigh t);
>grade
> x
[1℄ 68 61 63 70 69 65 72
> as.matrix(grade) # as.matrix(): 將資料框架變數轉成矩陣資料型態
no height weight
> as.data.frame(A) # as.data.frame(A): 將矩陣資料型態轉成資料框架變數
no height weight
> sum(A[,2℄)/length(A[,2℄) # 求身高平均值
[1℄ 66.42857
範例 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
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 , · · · , − 10 1
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
Student Ques. 1 Ques. 2 Ques. 3
1 3 5 1
(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階單位矩陣?
2 Julia green 160
順伯的窩 第 頁 共 頁
如何結合這兩個表格資料?
( ) 用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,
(e) > whi h(m == 1,arr.ind=TRUE)
(f) 將矩陣 m中非2的元素全部更改為0
7 58 191 M
;
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 =
的值?順伯的窩 第 頁 共 頁