#################################################
# 第一章
# 基本運算規則
#################################################
## 上課講義
#http://biostat.tmu.edu.tw/R/20161118/#1
# download NPP
# download "NppToR"
## 簡單的數字與字串運算
1+2
3-4
5*6
7/8
9^0 # 等同於9**0
1+2*(3/4)^5 # 先乘除後加減,有括號先運算
sqrt(2)
abs(-1)
## 基本向量運算
x = c(1, 2, 3, 4, 5) # 等同於1:5
y = x + 1
x*y
length(x) # 向量長度
sum(y) # 加總
prod(x) # 累乘
mean(y) # 平均
z = c(x, y)
## 向量及矩陣的指標用法
x[1]
y[c(2, 4)]
z[4:6] # 等同於z[c(4, 5, 6)]
x >= 3
y[x >= 3] #用logic value to select
x[x <= 2 | y == 5] # 且(&, &&),或(|, ||), 比較 == 二個等號
length(x[x < 4])
sum(y[y != 6]) # 不等號!= , !否定的意思
x[-1]
y[-(2:4)]
X = rbind(x, y) # row bind
Y = cbind(x, y) # column bind
X[1, 5]
X[, 2]
Y[2 ,]
X[, c(1, 3)]
Y[2:4, -1]
Y[-1, -2]
## 多種指標用法
iris ## iris dataset, this is a data.frame for practice in R
iris[, 5]
niris[, "Species"]
iris$Species
iris[["Species"]]
iris["Species"] # 等同於iris[5]
names(iris)
names(iris) = c("A","B","C","D","E")
iris$A
iris[18, c("B","D")]
iris[iris$E == "setosa", 1:4]
#################################################
# 第二章
# 變數型態
#################################################
## R軟體資料屬性: 邏輯真假值(logical,T,F), 整數(integer),
## 雙倍精確度數字(double, real, numeric),
## 複數(complex), 文字字串(character, string), 二進位資料(raw)
1; 20.0; 3e2 # 數值
class(1) #判斷資料型態
"stat" # 文字
class("stat")
TRUE; T; FALSE; F # 邏輯真假值 一定要全部大寫 在R裏是保留值
class(T)
## R軟體變數種類: 向量(vector), 矩陣(matrix), 陣列(array),
## 因子(factor), 資料框架(data-frame), 串列(list), 時間數列(ts)
## 向量(vector) ##
x = c(1, 3, 5, 7, 9) # 建立向量,或聯結不同的向量
is.vector(x) # 查詢x是否為向量變數
y = c(2, "stat", T) # 元素屬性需相同 *** 資料與變數, 不同
x[1]; y[-2] # 向量指標 #指標系統
x[c(1, 3, 5)] = c(2, 4, 6)
c(x, y[1])
length(x) # 算出元素個數
names(x) # 查詢或建立向量的元素名稱
names(x) = c("a", "b", "c", "d", "e")
x[c(3, 5)]; x[c("c", "e")] #指標系統內的使用也是向量# R是建立在向量上
## 陣列(array), 矩陣(matrix) ##
X = array(1:6, c(3, 2)) # matrix(1:6, 3, 2) # 建立陣列變數
Y = array(1:12, c(2, 3, 2))
is.array(X); is.matrix(X) # 查詢X是否為陣列及矩陣變數
is.array(Y); is.matrix(Y) # 查詢Y是否為陣列及矩陣變數
rbind(x, x); cbind(x, x) # 使用rbind及cbind來建立array變數
nrow(X) # 查詢陣列的列數
ncol(X) # 查詢陣列的行數
dim(Y) # 查詢Y陣列的維度
rownames(X) = c("R1", "R2", "R3")
colnames(X) = c("C1", "C2")
## 矩陣(Matrix) ##
X = matrix(1:6, 3, 2)
Y = t(X) # 轉置
Z = X %*% Y # 矩陣相乘
diag(Z) # 對角線函數
det(Z) # 行列式
A = matrix(1:4, 2, 2)
b = c(2,2)
solve(A) # 反矩陣
solve(A, b) # 線性聯立方程式
eigen(Z) # 特徵值與特徵向量
## 因子(Factor) ##
x = c(1, 1, 1, 2, 2, 2)
y = factor(x) # 等同於 as.factor(x)
y - 1
levels(y) # 查詢或設定分類資料
levels(y) = c("一", "二")
nlevels(y) # 查詢分類數目
## 串列(List) ## 用來儲存不同資料型態
l = list(L1 = x, L2 = y, L3 = Z) #同時命名,建立LIST#
names(l)
l$L1 # 等同於 l[[1]] 或 l[["L1"]]
l[1]
l[[1]]
class(l[1]);class(l[[1]]) ##比較串列的指標, 出來的資料型態不同##
l[2] # 等同於 l["L2"]
l$L3[1, 2]
l$L4 = 1:5
c(l, list(L5 = 1:10))
## 資料框架(Data-Frame) ## 比較整齊的LIST
## 它其時是一種LIST, LIST 的特例## 資料型態不同, 但同一行要一樣的資料型態
D = as.data.frame(Z) # 將變數類型轉為data-frame, 像醫院資料, 有身份, 名字,數值..
D[, 4] = c(T, F, T)
names(D) = c("D1", "D2", "D3", "D4")
===========================================
ge########################################################
## R 軟體系列課程 - R 軟體入門(一)
## 課堂練習題參考答案
## 2016/11/18
########################################################
####################
## 基本操作環境 ##
####################
## 將工作目錄設定為"D:\R_work\"
setwd("D:/R_work/") # 注意斜線方向
## 嘗試下載並安裝"rgl"套件
install.packages("rgl")
library(rgl) # 載入套件
## 利用 demo 功能檢視 rgl 套件中的函數範例
demo(rgl, package="rgl")
## 利用 help 功能查看 rgl 套件中的函數說明
help(surface3d) # 等同於 ?surface3d
## 嘗試執行 rgl 套件中的函數範例
example(plot3d)
####################
## 基本運算規則 ##
####################
## 生成一組2, 4, 6, 8, 10的向量 ##
c(2, 4, 6, 8, 10)
1:5 * 2 # 亦可
seq(2, 10, by=2) # 亦可
## 取出 iris 資料集中鳶尾花品種為 setosa 的資料
data(iris)
iris_setosa = iris[iris$Species == "setosa",]
iris_setosa = iris[iris["Species"] == "setosa",] # 亦可
iris_setosa = iris[iris[,5] == "setosa",] # 亦可
## 將上述資料依 Sepal.Length 變數進行排序
iris_setosa[order(iris_setosa$Sepal.Length),]
######################
## R 的變數與資料 ##
######################
## 已知 x = 1:5 以及 y = c("一", "二", "三", "四", "五")
## 將 x 的元素名稱改為甲、乙、丙、丁、戊
x = 1:5
y = c("一", "二", "三", "四", "五")
names(x) = c("甲", "乙", "丙", "丁", "戊")
## 查詢 rbind(x, y) 的維度
rxy = rbind(x, y)
dim(rxy)
## 將 y 變數的型態轉變為因子(factor)變數
y = as.factor(y)
## 將 cbind(x, y) 的型態轉變為資料框架(data-frame)
cxy = cbind(x, y)
cxy = as.data.frame(cxy)
## 建立一個 2*3*4 的三維陣列,其元素為 1:24
array(1:24, dim=c(2,3,4))
## 查詢 rbind(x, y) 的型態是否為陣列(array)
is.array(rxy)
## 將 x, y 合併為一個串列(list),並查詢其第一個元素
lxy = list(X=x, Y=y)
lxy$X; lxy[["X"]]; lxy[[1]] # 試試 lxy["X"] 或 lxy[1] 的結果,變數型態有何不同?
沒有留言:
張貼留言