2016年11月27日 星期日

R_2016_1118_第一次上課

#################################################
# 第一章
# 基本運算規則
#################################################
## 上課講義
#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] 的結果,變數型態有何不同?


沒有留言: