###第一周:R基礎
rm(list = ls()) #ctr+L
###矩陣相乘,函數diag()
a=matrix(1:12,nrow=3,ncol=4)
b=matrix(1:12,nrow=4,ncol=3)
a%*%b
a=matrix(1:16,nrow=4,ncol=4)
diag(a)#傳回對角線元素
diag(diag(a))
diag(4)#對角線為1的機關矩陣
###矩陣求逆,函數rnorm(),solve()
a=matrix(rnorm(16),4,4)#産生4*4的随機數
solve(a)#矩陣求逆!!!!(逆矩陣)
b=c(1:4)
solve(a,b)#求方程的解
##矩陣的特征值、特征向量eigen()
a=diag(4)+1
a.e=eigen(a,symmetric = T)
a.e
a.e$vectors%*%diag(a.e$values)%*%t(a.e$vectors)####??????
###數組
x=c(1:6)
x
is.vector(x)#x是一個向量嗎。
is.array(x)#x不是數組
dim(x)<-c(2,3)#增加維數,x變為數組
is.matrix(x)#x也是一個矩陣
####資料框,與矩陣的差別,矩陣每個元素都是數字(數組也類似),矩陣形式,但每列可以是不同的類型
x1=c(1,2,3,4,5,6,7,8,9,10)
length(x1)
x2=c(1,2,3,4,5,6,10,7,8,9)
length(x2)
x=data.frame(x1,x2)#向量組合成為資料框,可以是不同類型,數組或字元,x1與x2長度相等
(x=data.frame('重量'=x1,'運費'=x2))#替換列頭
#畫散點圖,函數plot()
plot(x)
#讀文本檔案資料,先設定工作目錄,把文本檔案放于該目錄下
x=read.csv("F:\\R語言\\data.csv")
#讀剪貼闆(文本或Excel資料可通過剪貼闆操作)
y=read.table("clipboard",header = F)#header=T表示不讀列頭
#Excel檔案(方法一:另存為空格分隔(就是原先的空格變為,)的prn文本格式再讀)
w=read.table("F:\\R語言\\data.prn",header = T)
#方法2:安裝RODBC包,再通過ODBC讀
install.packages("RODBC")
library(RODBC)#裝載包
z<-odbcConnectExcel("F:\\R語言\\student.xls")
(w<-sqlFetch(z,"Sheet1"))
#####循壞語句(for語句)
a=0
for(i in 1:59){a[i]=i*2+3} #格式for(循壞變量 in 周遊範圍){循壞體(向量a裡的第i個元素=啥,将i按指定的規律指派)}
a
for(i in 1:59){a[i]=i*2+3;b[i]=i*5-4}
b=0
b#(與a、b的初始值無關,但是要有初始值)
##while語句
a[1]=5
i=1
while(a[i]<121){i=i+1;a[i]=a[i-1]+2}##滿足這個條件便開始循壞
###source()函數,print()函數
source("F:\\R語言\\learningR.R")##運作腳本語言
print(x)#在監控台來顯示結果
######綜合性例子,模拟産生統計專業同學的名單(學号區分),記錄數學分析,線性代數,機率統計三科成績,然後進行統計分析
num=seq(2120170400,2120170400)#seq()函數産生向量,産生100個不同的學号
num
#用runif和rnorm
#産生100個均勻分布的随機數,上限是100,下限是80,産生的向量可能會有小數點,用round()函數四舍五入
x1<-round(runif(100,min=80,max=100))
x1
x2=round(rnorm(100,mean = 80,sd=7))#均值為80,标準差為7,正态分布
x2
x3=round(rnorm(100,mean = 83,sd=18))#均值為83,标準差為18
x3
x3[which(x3>100)]=100#先找到大于100的數的下标,再将此下标對應的值指派為100
##合成資料框并儲存到硬碟
#data.frame()
#write.table()
x=data.frame(num,x1,x2,x3)
write.table(x,file = "F:\\R語言\\mark.txt",col.names = F,row.names = F,sep = " ")#将x資料框寫入到檔案指定的地方
##計算各科的平均分mean(),collMeans(),apply()
mean(x)###運作為NA
colMeans(x)##對列求平均值,會對學号也求平均值
colMeans(x)[c("x1","x2","x3")]#不顯示列
apply(x,2,mean)#表示對x資料框作2(列)求mean操作,--1(行操作)
###求各科最高最低分
apply(x, 2, max)#對列求最高分
apply(x,2,min)#對列求最低分
##求每個人的總分
sum=apply(x[c("x1","x2","x3")],1,sum)
x=data.frame(num,x1,x2,x3,sum)