par(family="Sarasa Gothic CL")#這個命令運行后就可以使用中文字體了
a<-3+7
b<-8
data("iris")
as.data.frame()
#加注釋
control+enter #運行當前行
setwd('//Users//wangxinran//Desktop//R語言')#將括號內(nèi)更改為默認目錄谣妻,
#所有文件將默認儲存到這個文件夾,點上欄文件夾符號即可查看該文件夾勾拉,注意
#要把單/改為雙//
getwd()#查看當前目錄是什么
install.packages('e1071')#安裝一個包e1071
library('e1071')#打開安裝包
x<-c(1,2,3,4,5)#寫向量
y<-x^2
plot(x,y)#畫圖
?plot#查幫助,問電腦plot是做什么的
plot(cars)
plot(x,y,type='l',col='red')#讓圖是一條紅色的線
x=c(1,2,3,4,5)
y=c(6,7,8,9,0)
mean(x)#求x的平均值
x<-c(1,2,3,4,5,2,4,3)
y<-c(x^2)
plot(x,y)
q<-c(x,x,7,8,5)#q里面裝了x
mean(q)
q[5]#取q里的第五項鬓照,注意不安shift,是方括號孤紧,換成英文
q[3:5]#取第三項到第五項
A<-9
a<-8
#R語言的變量或者文件命名區(qū)分字母大小寫豺裆,所有的字母和數(shù)字都可以用,
#后面還可以跟.或者下劃線_号显,用.或者字母開頭臭猜,但是若用.開頭,
#后面緊接著的一位不能是數(shù)字押蚤,命名長度不限
wxr.x1999_R <- c(1,3,5,8)#注意c不可以大寫
#寫完一個代碼或命令要用蔑歌;隔開或者換行
#{}在執(zhí)行循環(huán)體或函數(shù)語序體時會用
objects()#查看當前使用過的變量
rm(a,b)#刪除某幾個變量a,b
dev.new()#新開一個窗口揽碘,我們再執(zhí)行畫圖次屠,圖像就在新窗口顯示
assign("m",c(1,2,3))#把向量賦給m,也是寫向量的一種方式
length(m)#向量m的長度
#向量運算雳刺,兩個向量必須長度相當
n<-m+g
n<-m*g
n<-m/g
n<-m^g
sqrt(m)#對m開平方
exp(m)#e的m次方
log(m)#還可以取sin劫灶,cos
log(9,3)#log(x,base),后面是底,前面是真數(shù)
#復制rstudio中的圖像到word煞烫,點擊右欄polts浑此,export,copy to clipboard滞详,
#再黏貼到word
#control+l清空
#control+s 儲存(筆記)
#control+加減號凛俱,可調(diào)整頁面字體大小
data()#可顯示R自帶的數(shù)據(jù)庫
data(CO2)#可調(diào)出數(shù)據(jù)庫中的co2來看,在右欄中單擊即可顯示表格
#當上一行出現(xiàn)錯誤時料饥,按鍵盤上箭頭復制上一行蒲犬,修改
#注意數(shù)字跟字母相乘時,也一定要有*號y=-1*x
#賦值符號前后有點空格岸啡,方便觀看
#注意大小寫原叮,向量別忘了c
data.frame#數(shù)據(jù)框
data("iris")
iris<-iris
max(iris$Sepal.Length)#查看表中某一列或行的最大值
range(iris$Sepal.Width)#查看表中某一行或列的范圍
prod(x,y) # 求乘積
var(x)# 求方差
x <- 1:30
x <- 2*1:15#產(chǎn)生向量1~15,且每一項都乘2
x <- seq(from=3,by=0.5,length=5)#seq 產(chǎn)生規(guī)則序列巡蘸,by是公差
x <- seq(-10,10,by=0.1)#另一種寫法,0.1的0可以省略
y=sin(x)
plot(x,y)
seq(2:8)#表示數(shù)列從1開始到8-2+1奋隶,即1 2 3 4 5 6 7
m <- 30
n <- (m-1):60
x <- c(-3,4,6.5,7,0)
y <- rep(x,times=5)#把x整體重復5遍
y <- rep(x,each=5)#把x每個數(shù)挨著重復5遍
x <- 4
y <- 5
if(x==4) z=5+6#雙==表示判斷誰等不等于誰,若if條件不滿足,則找不到z的值
if(x<8) h=10-x
if(x<8&y>1)t=x+2*y#&“與”悦荒,表示前后兩個條件同時成立
if(!(x<5))z=1#!"非“唯欣,表示否定后面的條件,x>=5,但輸入的x=4搬味,
#所以無法輸出z
s <- 4
temp <- s<3#temp表示判斷后面命題是否為真境氢,再輸入temp回車蟀拷,系統(tǒng)會告訴你
#True,F(xiàn)lase
x <-5
temp? <- x>3
if(temp)z=x+6#即如果temp出來是True萍聊,就能運算出z问芬,F(xiàn)就算不出來
q <- 5
temp <- q>8
if(temp)p=11
x <-5
y <-6
if(x==6|y>3)z=11#|“或”,表示即前面或者后面只要有一個成立即可
setwd('//Users//wangxinran//Desktop//R語言')#先用setwd把目錄換成默認
teens <- read.csv("snsdata.csv")#導入目錄文件寿桨,把文件數(shù)據(jù)命名為teens
str(teens)#緊湊的表示對象的內(nèi)部結(jié)構(gòu)此衅,即顯示teens的內(nèi)容
table(teens$gender)#統(tǒng)計表格中g(shù)ender列每一種元素的個數(shù)
teens <- read.csv(file="snsdata.csv",header=T)
#header=T有表頭(即第一行的變量名),header=F沒表頭牛隅,file是格式炕柔,沒啥用
is.na(teens$age)#看age這個變量哪一列數(shù)據(jù)缺失
#$表示引用數(shù)據(jù)中的某一列
z <- c(1:3,NA)
is.na(z)#看z哪里缺失數(shù)據(jù)酌泰,缺失的地方是True媒佣,不缺失Flase
#缺失有兩種,第一是數(shù)據(jù)直接是缺失的陵刹,第二種是數(shù)據(jù)包在運算過程中缺失默伍,
#NaN 表示not a number,eg:0/0衰琐;Inf—Inf也糊,當數(shù)據(jù)中出現(xiàn)這兩個時,
#用is.nan()或is.na()都能判斷數(shù)據(jù)在運算過程中是缺失的羡宙,
#但is.nan()只能判斷運算過程中的缺失
#而is.na()兩種缺失都能判斷
x <- c(3,4,5,Inf-Inf,0/0)
is.na(x)
is.nan(x)
q <- c("x","y","z")#向量q可以是一個字符或字符串
q <- c('I want to eat','no')
labs <- paste(c("X","Y"),1:10)#將XY與數(shù)字1到10擬合(連接)狸剃,賦值給lab
labs <- paste(c("X","Y"),1:10,sep='+')#sep表示擬合符號用加號+擬合
labs <- paste(c("X","Y","Z"),1:10,sep='&')#沒有sep表示默認用空格
#作為中間的擬合符號
paste(1:12,c("st","nd","rd",rep("th",9)))#rep 重復9次
x <-c("hello","world","!")
nchar(x)#判斷字符向量中,每一個元素字符串中字母的個數(shù)
DNA <- "AtGCtttACC"
tolower(DNA)#把所有的字母換成小寫
toupper(DNA)#把所有的字母換成大寫
chartr("Tt","Uu", DNA)#改變字母狗热,把T變成U钞馁,t變成u
chartr("TtA", "Uua", DNA) # T換成U, t換成u, A換成a
X<-c("He say:\'hello', and then go")
X<-c("He say:'hello', and then go")
substr("abcdef",start=2,stop=4)#截取字符串string中的一部分sub,從第二個到第四個
#index vector 向量的索引匿刮,即在向量里取一部分僧凰,形式:向量[ ]
x<-c(-3:10,NA,NA)
x[is.na(x)] <- 0#把x里的NA改成0
y <- x[!is.na(x)]#x不是NA的地方賦給y
(x+1)[(!is.na(x)) & x>0] -> z#把x里不是NA并且大于0的數(shù)取出來,加1熟丸,最后賦給z
x[(!is.na(x)) & x>0]+1 -> z#與上面一樣的
x[1:3]#看x第一到三個元素,[ ]里填想索引的子集
x<-c(-3:10,NA,NA,3:5,NA,1)
x[is.na(x)] <- 3
y<-c(-4:5)
y[y < 0] <- -y[y < 0]
y <- abs(y)#把y的每一項都變成正的
teens <- read.csv("snsdata.csv")
teens$gender <- ifelse(is.na(teens$gender),'I see',teens$gender)
#把teens里gender這一列里缺失的地方都換成I see,其余不變
#ifelse,如果(缺失,換成I see)否則(不變)
c("x","y")[rep(c(1,2,2,1), times=4)]#把字符“x","y"按1221的順序重復思辨
x<-c(-3:10)
y <- x[-(1:5)]#除去x里的第1到5項
fruit<- c(5, 10, 1, 20)
names(fruit) <- c("orange", "banana", "apple", "peach")
fruit
lunch<- fruit[c("apple","orange")]#索引里面的apple总珠,orange那兩列
#想把上面的fruit表格存下來,首先把你想存的地址先換成當前目錄setwd()
#fruit表格有兩種儲存形式
write.table(fruit, file = "fruit.txt", row.names = F, quote = F)#txt形式
write.table(fruit, file = "fruit.txt")#有表頭
install.packages('ggplot2')#作圖包
library('ggplot2')#只需要安裝一次山涡,以后只要library用就行
pie(iris$Sepal.Length)#畫餅狀圖
plot(iris$Sepal.Length)#散點圖
gupiao <- read.csv('ss_stock.csv')
plot(gupiao)
plot(gupiao$Open,type='l')
#factor型變量,分類別或者分層次的,比如iris里的species
levels(iris$Species)#看species的每一層是什么
str(iris)#species分3類"setosa","versicolor",..我們可以分類畫圖
plot(iris$Sepal.Length,iris$Species)
library(MASS)#用require也可以加載一個包
a1 <- Cars93
plot(a1$Origin)
dev.new()
plot(a1$Origin,a1$Price)#箱線圖唆迁,中間的黑線是中位數(shù)鸭丛,可查資料看
plot(~iris$Sepal.Length+iris$Petal.Length)#畫二者的關(guān)系圖,注意~別忘了
#~表示取一部分數(shù)據(jù)唐责,看兩兩之間有什么關(guān)系
plot(iris$Sepal.Length~iris$Sepal.Width+iris$Petal.Length)#~前是因變量縱坐標
#~后面是自變量鳞溉,這一個命令畫了兩個圖(sepallength分別跟width跟length的圖),
#點箭頭可以查看前面的圖
#recursive遞歸結(jié)構(gòu)熟菲,list里面再裝一個list
x <- c(3:10,NA,NA)
mode(x) #看一個對象的屬性
#object對象做入,可以是向量秫逝,也可以是list列,向量只能是簡單形式eg:numeric煎娇、character
#多個模式不能交雜在一個vector里信殊,但list里可以有多種形式
y <- as.character(x)#as.character橱野,改變類型,把x從數(shù)字型轉(zhuǎn)化成字符型as.numeric( )
#as.logical( )as.charactor( )as.matrix( )as.dataframe( )as.list( )
a <- numeric()#寫一個空向量a
a[3] <- 7#填充a的第三個位置為7
length(a) <- 3 #a的長度就變?yōu)?了楷兽,用這種辦法可以改變向量的長度
a[4:8] <- c(6,7,10,-2) #再把a的4~8位用向量c填充
length(a) <- 5# 截取核偿,使a的長度變?yōu)?,只保留前五個元素
a <- a[-6:-8]#去掉a里的第六到底八個元素
x <- cbind(a=1:3,pi=pi)#列合并
x <- rbind(a=1:3,b=7:9)#按行合并
options(digits = 3)#改變小數(shù)的有效位數(shù)
attributes(x)#顯示x的維度
#dim(x)看x行麸祷、列的維度融求,并寫成一個向量
#結(jié)果出現(xiàn)“dim 3 2”:表示有三行兩列
#dimnames[1]:看行的名字
#dimnames[2]:看列的名字
#dim(M)[1]:看數(shù)據(jù)框M行的維度(有幾行)
#dim(M)[2]:看數(shù)據(jù)框M列的維度(有幾列)
x <- 1:24
attr(x,'dim') <- c(3,8)#把x的維度變?yōu)槿邪肆?/p>
row.names(x) <- c('row1','row2','row3')#改變行的名字
colnames(x) <- c('col1','col2','col3','col4','col5','col6','col7','col8')
colnames(x) <- paste(c("col"),1:8,sep = "")#這樣就不用一個一個輸入col了
attr(x,"dimnames")<-list(paste("row",1:3,sep = ""))#另一種改變行名字的辦法
class(x)#class看object的類型eg matrix莱睁,數(shù)組等露乏,比mode范圍更大
typeof#看是整形,范圍最小最細致
as.integer(digits)#把小數(shù)變成整形
gl(2,5)#2代表兩個水平闸与,5代表每一個水平有5個忽洛,gl產(chǎn)生一個factor型寂恬,即因子型變量
#因子型,比如iris里的species就是因子型伊磺,有三層
a <- gl(2,5,label=c("Male","Female"))
state <- c("tas","sa","qld")
class(state)
statef <- factor(state)#把state換成因子變量
statef <- as.factor(state)#同上
class(statef)
is.factor(statef)
scores <- scan()#scan()在鍵盤上輸入數(shù)據(jù)賦給scores逻恐,再看scores就有你輸入的數(shù)據(jù)
#> scores <- scan()
#1: 68 89 98 100 67 28#輸入你的數(shù)據(jù)
#7:? ? ? ? ? ? ? ? ? #回車
#? Read 6 items? ? ? #系統(tǒng)自動出現(xiàn)
#> scores? ? ? ? ? ? #查看scores
#[1]? 68? 89? 98 100? 67? 28
cut(scores,breaks=c(0,70,80,90,100))#把數(shù)據(jù)按0~70,70~80····來分段蜓竹,
#就可以看到每一個數(shù)據(jù)在哪一層辖源,還可以給每一層用字符命名labels=
scoresF <-cut(scores,breaks=c(0,70,80,90,100),labels=c("差","中","良","優(yōu)"))
table(scoresF)#統(tǒng)計每一層分別有多少個
class(scoresF)#scoresF是因子型
sexs <- sample(c('M','F'),length(scores),replace = T)#隨機抽樣蔚携,構(gòu)造性別向量
#隨機產(chǎn)生一些性別,按照scores的長度移必,自動給每個數(shù)據(jù)配上性別
#replace=T“有放回的隨機抽樣袋坑?Ture”
table(sexs,scoresF)#統(tǒng)計男女同學在不同層次的人數(shù)鄙麦,做一個table玩焰,sex為行scoresF為列
tapply(scores,sexs,mean)#計算男女同學的平均成績“成績要按照性別求平均”
tapply(scores,sexs,sd)#計算男女同學成績的標準差“成績要按照性別求標準差”
#因子型變量不能直接比較大小,因為默認是無序捞蚂,需要先變成有序型的因子變量ordered=T
scoresF1 <- factor(scoresF,ordered = T)
scoresF1[1]<scoresF1[3]
#矩陣就是一個二維的數(shù)組
x <- 1:24
dim(x) <- c(3,8)#產(chǎn)生矩陣的方法(1)只能按列產(chǎn)生,先產(chǎn)生第一列愧旦。。遭庶。
attr(x,'dim') <- c(3,8)#產(chǎn)生矩陣的方法(2)
#產(chǎn)生數(shù)組方法如下:
dim(x) <- c(2,6,2)#兩行六列的矩陣兩個(必須相乘等于元素個數(shù))
x <- 1:36
dim(x) <- c(2,2,3,3)#四維數(shù)組宁仔,3*3個2*2維的矩陣
#數(shù)組:2*2的矩陣,3個為一組峦睡,有3組
#先產(chǎn)生一個3*3的大矩陣翎苫,每一個元素都是一個2*2的矩陣
dim(x) <- c(4,9)
x[c(1,3,4),c(1,3,5,7,9)]#取第1,3榨了,4row與第1煎谍,3,5阻逮,7粱快,9column交叉項
x[1:3,2:8]#矩陣索引的另一種,取1~3行叔扼,2~8列
x[,2:8]#","表示都要事哭,行都要,列取2~8
x[5]#x[n]可以按矩陣生成的順序一個一個地索引瓜富,先索引完第一列鳍咱,再開始第二列
x <- 1:36
dim(x) <- c(2,2,3,3)
x[1,1,1,1]#數(shù)組索引
x[,,2,3]#","表示全要
x[3]#數(shù)組也可以按數(shù)組產(chǎn)生的順序一個一個索引,順序索引
a <- 1:4
b <- 2:5
cbind(a,b)#按列產(chǎn)生矩陣
rbind(a,b)#按行產(chǎn)生矩陣
x <- 1:36
matrix(x,nrow = 9,byrow=T)#按行產(chǎn)生矩陣,9行
matrix(x,nrow = 4,byrow=F)#按列產(chǎn)生矩陣与柑,4行
x <- 1:36
array(x,c(4,9))
#產(chǎn)生矩陣的方法有谤辜?
#dim, attr,cbind,rbind,matrix,array
y <- 25:48
y.matrix <- matrix(y,nrow=4,byrow=F)
x <- 1:24
dim(x) <- c(4,6)
x+y.matrix
x*y.matrix#對應位置元素相乘,要求兩個矩陣的行數(shù)列數(shù)都相同
L <- 1:24
H <- 25:48
L%*%H #兩個向量內(nèi)積:對應元素相乘相加,是一個數(shù)
L%o%H #兩個向量外積:Anx1 x A1xn=Anxn,是一個向量价捧,自動把前面那個變成一列的向量
outer(L,H,'*')#計算外積的另一種方式丑念,*可以改成任意一種運算符號,甚至是一個函數(shù)
f <- function(x,y){cos(x)/sin(y)}
outer(L,H,'f')#L,H按照f做外積運算
#L里第一個元素结蟋,與H里第一個元素當成xy去做f運算脯倚,作為新矩陣的第一個元素
f <- function(x,y){min(x,y)}
outer(L,H,'f')
y <- 25:48
y.matrix <- matrix(y,nrow=4,byrow=F)
x <- 1:24
dim(x) <- c(6,4)
x%*%y.matrix#線代里的矩陣乘法
dim(y.matrix)
y.matrix <- t(y.matrix)#t()做矩陣轉(zhuǎn)至
dim(y.matrix)
a <- 1:24
x <- array(a,c(2,3,4))
aperm(x)#數(shù)組轉(zhuǎn)至 c(4,3,2)變成兩個矩陣推正,以前的所有矩陣的第一行組成第一個矩陣
#以前所有矩陣的第二行挑出來組成第二個新的矩陣
A <- matrix(1:36,nrow = 6)
diag(A)#取對角線元素
sum(diag(A))#diagA所有元素相加
diag(3)#生成3x3階單位矩陣
mean(A)#求A所有元素的均值
iris <- iris
mean(iris$Sepal.Length)#求Sepal.Length這一列的均值
colMeans(iris[,1:4])#同時求一到四列各自的均值
colMeans(iris[3:8,1:4])#同時對1~4列的3~8行求各自的均值
apply(iris[,1:4],1,mean)#對iris的所有行求均值恍涂,若中間換成2就是求列平均
#apply既可以對列求均值,也可以對行求均值
A <- 1:36
A <- matrix(A,nrow = 6,byrow = T)
B <- 37:72
B <- array(B,dim = c(6,6))
A*B#A B 對應元素相乘
A%*%B#A B做高代里的矩陣乘法
diag(A)#取出對角線元素
trace_A <- sum(diag(A))#trace_A一般用來命名矩陣的ji植榕,就是對角線元素的和
diag(3)#生成3x3單位矩陣
mean(A)#所有元素求均值
colMeans(A)#每一列求均值
rowMeans(A)#每一行求均值
apply(A,2,mean)#每一列求均值,注意mean函數(shù)可以換再沧,比如sum
apply(A,1,mean)#每一行求均值
#線性方程組A%*%x=b
#求解線性方程組solve(A,b)
x <- c(1,-2,3,-4,0,1,-1,1,1,3,0,1,0,-7,3,1)
A <- matrix(x,nrow=4,byrow = T)
b <- c(4,-3,1,-3)
x <- solve(A,b)#以行的形式展示結(jié)果
x <- solve(A)%*%b#以列的形式展示結(jié)果
#注意,只能求解方陣
#8e-16 8乘10的負16次方
A%*%x#可用于驗證結(jié)果是否正確尊残,若=b則正確
a <- c(1,-2,3,-4)
b <- c(0,1,-1,1)
c <- c(1,3,0,1)
d <- c(0,-7,3,1)
A <- rbind(a,b,c,d)#按行產(chǎn)生矩陣
b <- c(1,2,3,4)#注意不要寫成列向量
aperm(b)#求數(shù)組b的轉(zhuǎn)至
t(as.matrix(b))#把b改成矩陣炒瘸,求矩陣轉(zhuǎn)至
B[-4,]#去掉矩陣B中的某行或某列
#只有方陣才能求行列式,特征值夜郁,特征向量
B <- 37:72
B <- array(B,dim = c(6,6))
ev <- eigen(B)#求B的特征值特征向量
ev$values#只看eigen value
ev$vectors#只看eigen vector
typeof(ev)
ev[[1]]#只看list里第一項
ev[[2]]#只看list里第二項
#自己編個程序什燕,求矩陣的正交變換
tapply(iris$Sepal.Length,iris$Species,mean)
tapply(a,b,mean)#按b求a的均值
A <- 1:36
A <- matrix(A,nrow = 6,byrow = T)
apply(A,1,sum)#對矩陣A按行求和
a <- sapply(1:3,function(x)x^2)#對A第1:3個元素按function變換,求出來a是個向量
#可以直接求和 求均值 sum(a)mean(a)
b <- lapply(1:3,function(x)x^2)#對A第1:3個元素按function變換竞端,求出來是個list,
#list是一個雜框庙睡,想裝什么都行
sapply(iris[,1:3],function(x)cos(x)/(sin(x)+exp(x)))
sapply(iris[,1:3],mean)
iris1 <- iris[1:4,1:4]
sapply(iris1,mean)#每一列求均值
b1 <- lapply(iris[,1:3],mean)
b1[[1]]#看b1的第一個位置
class(b1)
b2 <- unlist(b1)#把list解開事富,就可以求和求均值了
c <- mapply(mean,iris[,1:3])#先喂函數(shù),再喂數(shù)據(jù)
sum(mapply(function(x)x^2,iris[,1]))#mapply出來的類型不一定
mapply(rep,times=1:4,x=4:1)#4重復1遍乘陪,3重復2遍统台。。啡邑。
Lst <- list(name="Wxr",husband="Ldm",lunch="中餐",food=c("beef","tomato"))
#構(gòu)造一個list
Lst$name#查看其中一項
x <- c(1,3,4)
y <- matrix(1:24,nrow = 3,byrow=T)
z <- list(x,y,c("a","b"))#把xyc合成一個list
z[[1]]#查看list第一項
x <- c(1,3,4)
y <- matrix(1:24,nrow = 3,byrow=T)
z <- c("a","b","c","d")
L <- list(L1=x,L2=y,L3=z)
L$L1#查看第一項
Lst_iris <- list()#先定義一個空的list或者空的vector
Vector_iris <- c()
for(i in 1:50){
? Lst_iris[[i]] <- apply(iris[i,1:4],1,mean)
? Vector_iris[i] <- sd(iris[i,1:4])
}#對空變量的每一項參與for循環(huán)
Lst_iris
Vector_iris
Lst_iris[[1]]
c(Lst_iris,Vector_iris)#將兩個list合并
data.frame#數(shù)據(jù)框 eg iris贱勃,比list方正,里面的向量必須長度一致谤逼,矩陣有相同行數(shù)
#數(shù)據(jù)框是一種矩陣形式的數(shù)據(jù)贵扰,數(shù)據(jù)框中的各列可以是不同類型的數(shù)據(jù),每列是一個變量
#流部,每行是一個觀測
ID <- c(1,2,3,4)
name <- c("A","B","C","D")
score <- c(60,70,80,90)
student1 <- data.frame(ID,name)#構(gòu)造兩個小數(shù)據(jù)框
student2 <- data.frame(ID,score)
total_student1 <- merge(student1,student2,by="ID")
#因為student1戚绕,2有相同的ID,就可以用merge按照ID合成一個大的數(shù)據(jù)框
ID <- c(1,2,3,4)
name <- c("A","B","C","D")
score <- c(60,70,80,90)
sex <- c("M","F","M","M")
student1 <- data.frame(ID,name)
student2 <- data.frame(score,sex)
total_student2 <- cbind(student1,student2)
#因為student1枝冀,2沒有相同的變量舞丛,可以用cbind進行列合并成一個大的數(shù)據(jù)框
ID <- c(1,2,3,4)
name <- c("A","B","C","D")
student1 <- data.frame(ID,name)
ID <- c(5,6,7,8)
name <- c("E","F","G","H")
student2 <- data.frame(ID,name)
total_student3 <- rbind(student1,student2)
#因為student1,2沒有相同的變量果漾,可以用rbind進行列合并成一個大的數(shù)據(jù)框
total_student3
attach(iris)#把數(shù)據(jù)框引到界面里球切,有了此命令就可以直接用Sepal.Length
#可以attach多個數(shù)據(jù)在界面里
Sepal.Length
detach(iris)#把數(shù)據(jù)框從界面拿掉,后面就不能直接用Sepal.Length查找
Sepal.Length
mydataframe <- data.frame(
? name=c("張三", "李四", "王五", "趙六", "丁一"),
? sex=c("F","F","M","M", "M"),
? age=c(16, 17, 18, 16, 19),
? height=c(167.5, 156.3, 177.3, 167.5, 170.0),
? weight=c(55.0, 60.0, 63.0, 53.0, 69.5) )
#可以在括號里寫內(nèi)容绒障,直接列合并生成數(shù)據(jù)框
mydataframe[2:4,]#可以像矩陣一樣索引
mydataframe[["name"]]#數(shù)據(jù)框獨特的索引方式
mydataframe$name# $列索引
colnames(mydataframe) <- c("names","sexs","age","height","weight")#改列名字
row.names(mydataframe) <- c("第一行","第二行","第三行","第四行","第五行")
mydataframe1 <- t(mydataframe)#轉(zhuǎn)至后就不是數(shù)據(jù)框了
mydataframe2 <- as.data.frame(mydataframe1)#強制轉(zhuǎn)化成數(shù)據(jù)框
mydataframe2$第一行
mydataframe$H_W_ratio <- mydataframe$height/mydataframe$weight
#添加一列H_W_ratio吨凑,內(nèi)容是身高與體重的比值
mydataframe$BIM <- mydataframe$weight/mydataframe$height^2
edit(mydataframe)#彈出一個表格,數(shù)據(jù)編輯器端盆,可以直接在里面改(mac不行)
#但改完只能顯示在屏幕里怀骤,不能保存在data.frame里
mydataframe <- edit(mydataframe)#給他賦值以后才能保存下來费封,賦值成新的mydataframe
fix(mydataframe)#跟edit一樣,但是可以直接存到data.frame里
subset(mydataframe,name=="王五")#只調(diào)王五的信息出來
subset(mydataframe,name=="王五"|name=="趙六")#調(diào)王五跟趙六的信息
subset(iris,Species=="setosa")#注意是雙等號蒋伦,就是判斷弓摘,是setosa的就調(diào)出來
library("MASS")#讀一個以前下載的包
Cars93 <- Cars93#看cars93調(diào)出來
USA_pro <- subset(Cars93,Cars93$Origin=="USA")#單條件選取
USA_pro <- subset(Cars93,Cars93$Origin=="USA",select=c(Type,Price))
#挑選出滿足條件的type跟price,只看他倆
pro <- subset(Cars93,select=c(Type,Price))#只看所有的type跟price
USA_pro_mode_Astro <- subset(Cars93,Cars93$Origin=="USA"&Cars93$Model=="Astro")
#多條件選取
pie(a,b)
a <- c(40,50,60,70)
b <- c("a","b","c","d")
pie(a,b)
pie(a,b,col = rainbow(4))
levels(Cars93$Manufacturer)#看manufacturer有幾種痕届,后面好挑選畫圖
#挑選"Acura"? ? ? ? "Audi"? ? ? ? ? "BMW"? ? ? ? ? "Buick"
M <- subset(Cars93,Manufacturer=="Acura")
dim(M)#取M的維度韧献,是個向量
dim(M)[1]#可以只看Acura行的維度,就知道種類是Acura的有幾個了
length(which(Cars93$Type=="Compact"))#用這個也可以知道類型是Compact的有幾個
a <- c(dim(subset(Cars93,Manufacturer=="Acura"))[1],
? ? ? dim(subset(Cars93,Manufacturer=="Acudi"))[1],
? ? ? dim(subset(Cars93,Manufacturer=="BMW"))[1],
? ? ? dim(subset(Cars93,Manufacturer=="Buick"))[1])
#取"Acura","Audi","BMW","Buick"行的維度數(shù)來畫圖
table(Cars93$type)#也可以直接用table來代替上面的步驟研叫,直接統(tǒng)計出每種類型的數(shù)量
b <- c("Acura","Audi","BMW","Buick")#給每一部分起名字
pie(a,b,col=c("skyblue","ligthgreen","red","yellow"))
pairs(iris)#跟plot(iris)一樣#當兩個數(shù)據(jù)相關(guān)性很大時锤窑,可以去掉一個只留一個
#scatterplot散點圖
dev.new()
coplot(Cars93$Fuel.tank.capacity~Cars93$Price|Cars93$Origin)
#在origin的條件下,看油箱存油量跟價格的關(guān)系
#coplot(因變量嚷炉,自變量|因子變量)按照因子變量來畫因變量自變量的聯(lián)合散點圖
coplot(Cars93$Fuel.tank.capacity~Cars93$Price|Cars93$Origin+Cars93$DriveTrain)
#看油箱存油量跟價格在不同產(chǎn)地下的關(guān)系渊啰,油箱存油量跟價格在不同驅(qū)動下的關(guān)系
hist(iris$Sepal.Length)#畫頻數(shù)分布直方圖
hist(iris$Sepal.Length,nclass=4)#nclass規(guī)定分成幾組,就把前面那個圖的條合并一下
#但有的時候nclass不一定管用申屹,因為他是平均分配绘证,把上面那個nclass改成5就不行
hist(iris$Sepal.Length,breaks=c(4.3,4.5,5.5,6.5,7.5,7.9))#自定義分界點、組數(shù)
hist(iris$Sepal.Lengt,probability = T)#縱坐標變成頻數(shù)的占比
hist(iris$Sepal.Length,probability = F)#縱坐標是頻數(shù)
hist(iris$Sepal.Length,probability = T,main = "Length")#main給圖起個標題哗讥,可中文
par(mfrow = c(1,2))#把畫圖窗口分成一行兩列的塊(左右兩塊)
data <- c(rep(1,10), rep(2,5), rep(3,6))
data? #rep(2,5)產(chǎn)生5個2
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5), probability = T, main = "A")
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5), probability = F, main = "B")
par(mfrow = c(1, 2))
data <- c(rep(1, 10), rep(2, 5), rep(3, 6))
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5), axes = T, main = "axes = T")
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5), axes = F, main = "axes = F")
#axes=F就是不要坐標軸
par(mfrow = c(1, 2))
data <- c(rep(1, 10), rep(2, 5), rep(3, 6))
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5), col = "pink")#給顏色
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5), col = rainbow(3))
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5), col = rainbow(3),border=NA)
#去掉每一個框線
par(mfrow = c(1, 3))
data <- c(rep(1, 10), rep(2, 5), rep(3, 6))
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5),? density = 1, main? = "density = 1")
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5),? density = 2, main? = "density = 2")
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5),? density = 20, main? = "density = 3")
#給條添點線嚷那,密度大就是添的線多,沒具體值
par(mfrow = c(1, 3))
data <- c(rep(1, 10), rep(2, 5), rep(3, 6))
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5),? density=2,angle=45)
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5),? density=2,angle=90)
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5),? density=8,angle=30)#添的線的角度30度
hist(data, breaks = c(0.5, 1.5, 2.5, 3.5), density = 5,angle = 60,col = "pink")
barplot(GNP ~ Year, data = longley)#畫柱狀圖
barplot(cbind(Employed, Unemployed) ~ Year, data = longley)#做堆疊條形圖杆煞,即因變量可以多個
data("longley")#longley是軟件自帶的數(shù)據(jù)魏宽,跟iris一樣
barplot(cbind(Employed, Unemployed,Population) ~ Year, data = longley)
barplot(cbind(Employed, Unemployed) ~ Year, data = longley,col=rainbow(2))
boxplot(iris$Sepal.Length~iris$Species)#把因子變量放后面,箱線圖决乎,超出橫線是異常數(shù)據(jù)
boxplot(len ~ dose:supp, data = ToothGrowth,
? ? ? ? boxwex = 0.5, col = c("orange", "yellow"),
? ? ? ? main = "Guinea Pigs' Tooth Growth",
? ? ? ? xlab = "Vitamin C dose mg", ylab = "tooth length",
? ? ? ? sep = ":", lex.order = TRUE, ylim = c(0, 35), yaxs = "i")
ToothGrowth <-? ToothGrowth
#len因變量(縱坐標)队询,dose跟supp兩個因子變量兩兩搭配做自變量
which(iris$Sepal.Length<5&iris$Species=='virginica')#查找滿足條件的數(shù)據(jù),會顯示他所在的行
#用這個辦法可以看箱線圖的異常數(shù)據(jù)
#boxwex箱子的寬度 main給圖起名字 xlab橫坐標的名字 ylab縱坐標的名字
#sep 兩個因子變量之間的連接符號 ylim縱坐標的范圍 lex.order自變量的排列順序
# yaxs='i'表示刻度線都在數(shù)據(jù)范圍內(nèi)部瑞驱,緊貼著ylim的上下限
boxplot(len ~ dose:supp, data = ToothGrowth,
? ? ? ? boxwex = 0.8, col = c("orange", "yellow","green"),
? ? ? ? main = "boxplot",
? ? ? ? xlab = "x axes", ylab = "y axes",
? ? ? ? sep = "+", lex.order = FALSE, ylim = c(0, 50),yaxs = "r")
dotchart(cars$speed)#可以看到同樣的值有幾個
dotchart(cars$speed,xlim=c(10,20))#xlim規(guī)定橫坐標的范圍
length(which(Cars93$Type=="Compact"))
x <- seq(-10,10,0.1)
y <- x
z <- outer(x,y,function(a,b)a^2+b^2)#外積
class(z)
image(x,y,z)#畫一個熱力圖,沒有數(shù)據(jù)
contour(x,y,z)#畫一個等高線圖,因為z是x娘摔、y的平方和是個圓圈
z <- outer(x,y,function(a,b)a^2-b^2)
image(x,y,z)? ? ? ? ?
contour(x,y,z)#畫出來是個馬鞍面的
persp(x,y,z)#畫一個三維立體圖,也是個馬鞍面
#contour圖是persp同一圈的高度向底面映射實現(xiàn)的(即xoy面的投影)
dev.new()
persp(x,y,z,col= heat.colors(30),theta = 45,phi=15,r=sqrt(3),d=1,axes = FALSE)
#theta 設(shè)置視角的方位角方向唤反,phi為設(shè)置視角的余維度. r 觀察點到圖中心的距離.
#d 數(shù)值凳寺,用于增強或減弱透視效果. scale 設(shè)置在畫圖時是否要保持高度比例.
#expand 用于擴大或縮小z坐標.col 曲面表面的顏色. border 曲面邊框的顏色.
#ltheta, lphi 如果設(shè)置了這個值,曲面的光源就是根據(jù)ltheta和lphi設(shè)置的角度來繪制.
#shade 計算曲面陰影的參數(shù). axes 表示是否要畫坐標軸.
#ticktype設(shè)置標記的類型.
require(grDevices) # the same to library(grDevices)
x <- seq(-10, 10, length= 30)
y <- x
f <- function(x, y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r }
z <- outer(x, y, f)
z[is.na(z)] <- 1
op <- par(bg = "pink")#bg添加背景顏色
persp(x, y, z, theta = 30, phi = 30,
? ? ? expand = 0.5, col = rainbow(1000))
persp(x, y, z, theta = 45, phi = 20,
? ? ? expand = 0.5, col = rainbow(1000),
? ? ? r=180,
? ? ? ltheta = 120,
? ? ? shade = 0.75,
? ? ? ticktype = "detailed",
? ? ? xlab = "X", ylab = "Y", zlab = "Sinc( r )" ,
? ? ? border=30,
? ? ? axes = F)
x? <-? seq(-pi,? pi,? len=50)?
y? <-? x? ?
f? <-? outer(x,? y,? function(x,? y)? cos(y)/(1? +? x^2))
contour(x,y,f)
persp(x,y,f,col=heat.colors(30))
contour(x,y,f)
contour(x,y,f,nlevels=3,col='red',add=TRUE)#nleves=3增加3條等高線
#add=TRUE 在上面畫的那個圖上增加一些細節(jié),而不是畫新的彤侍,一般用于兩個高級做圖之間
image(x,y,f)
contour(x,y,f,add=TRUE)
plot(1:5, 1:5, type = "n", xlim = c(0, 6), ylim = c(-1, 8))#先畫了一個空框
symbols(x = 1:5, y = 1:5, circles = rep(1, 5), inches = FALSE, add = TRUE)
#add=T肠缨,就是把add前面的命令添加在上一個畫的圖里,上面兩個命令相當于下面這一個
symbols(x = 1:5, y = 1:5, circles = rep(1, 5),inches = FALSE,
? ? ? ? xlim = c(0, 6), ylim = c(-1, 8))
inches=T #英寸盏阶,畫的圓大一點晒奕,
#x = 1:5, y = 1:5 目的是給圓配圓心(1,1)(2,2)...circles = rep(1, 5)畫半徑是1的圓五個
plot(1:5, 1:5, type = "n")#若沒有type=‘n’,就會畫成散點圖,type=‘n’就是啥也不畫
plot(1:5, 1:5)#x=1,2,3,4,5 y=1,2,3,4,5 搭配成坐標(1,1),(2,2)...畫成散點圖
contour(x,y,f,axes = F)#不要坐標軸
contour(x,y,f,axes = T)#要坐標軸
plot(1:100)
plot(1:100,log="x")#設(shè)置x軸成為對數(shù)軸
#相當于下面
x <- 1:100
y <- log(x)
plot(1:100,log="y")#設(shè)置y軸成為對數(shù)軸
plot(1:100,log="xy")
x <- seq(-10,10,0.5)
y=sin(x)
plot(x,y,type='p')#散點圖
plot(x,y,type='l')#折線圖
plot(x,y,type='b')#不穿過點的曲線圖
plot(x,y,type='o')#穿過點的曲線圖
plot(x,y,type='h')#連垂直線
plot(x,y,type='s')#連成階梯形脑慧,一個點連另一個點的時候先橫向走
plot(x,y,type='S')#連成階梯形魄眉,一個點連另一個點的時候先豎向走
plot(x,y,type='o',col='red',font.main = 3,main="y=sinx",xlab="aaa",ylab="bbb",font.lab=2)
#font.main改標題的字體 font.lab改變坐標軸名稱的字體 font.axis改變坐標軸的字體
#1:normal? 2:斜體italic 3:粗體bold? 4:粗斜體 bold italic
plot(x,y,type='o',col='red',font.axis=2)
plot(x,y,type='o',col='red',font.main = 3,main="y=sinx",sub="sin function")
#sub=''添加副標題
x <- 1:30
y <- sin(x)
plot(x,y)#先畫一個散點圖
lines(x,y,col="red")
points(x,y,type = 's')
#lines,points都是低級做圖命令,它是在高級做圖命令下(eg:plot)闷袒,往原來的圖里添加一些別的信息
text(20,0.5,"lalala",col='blue')#在x=24坑律,y=0.5的位置寫一點文字
mtext('I want to China',col='green',side=4)
#在圖形邊框外寫文字,side=1下面囊骤,side=2左面晃择,side=3上面,side=4右面
setwd('//Users//wangxinran//Desktop//R語言')
HW <- read.table('HW.txt',header = T)
plot(HW)
x <- HW[,1]
y <- HW[,2]
plot(x,y)
lm.out <- lm(HW$Height~HW$Weight)#lm:找二者之間回歸直線y=ax+b中的參數(shù)
lm.out#intercept對應b(截距)断部,0.2719是a
abline(152.1136,0.2719,col='red' )#把回歸直線直接畫到上面的散點圖里为严,注意別喂錯數(shù)據(jù)位置
abline(lm.out$coefficients,col='blue')#第二種畫法,直接取系數(shù)稽揭,就不會寫錯數(shù)了
abline(lm.out,col='green')#第三種畫法
#做回歸:跟數(shù)據(jù)滑蚯,我們估計他們的關(guān)系是線性關(guān)系浪蹂,用lm找到線性回歸的系數(shù),再用abline畫出直線
#用poygon進行純色填充
xx<-c(1:100,100:1)
yy<-rev(cumsum(xx))#cumsum是累計求和告材,rev是顛倒數(shù)字順序
x <- c(1,2,3,4)
y1 <- cumsum(x)
y2 <- rev(y1)
plot(xx,yy,type='l')
plot(xx,yy,type='n',xlab="Time",ylab="Distence")#先畫一個空白框乌逐,再用polygon給封閉位置填充
polygon(xx,yy,col="gray",border="red")#border邊界顏色,col給封閉圖形填充顏色
title("I am happy to do this")#給上面的圖加標題
plot(c(1, 9), 1:2, type = "n")
polygon(1:9, c(2,1,2,1,NA,2,1,2,1), density = c(10, 20), angle = c(-45, 45))#填充線
#NA就是4~6中間的空白创葡,就畫成了兩個封閉圖形
#legend給圖例
x <- seq(-pi, pi, len=65)? #from –pi to pi, produce 65 data
plot(x, sin(x), type= "l",ylim = c(-1.2,? 1.8), col=3,lty =2)#lty線型,lty=2是虛線
#col取3就代表綠色绢慢,若他換成green灿渴,legend里也要換成green,必須一一對應
points(x,cos(x),pch=3,col=4)#pch表示數(shù)據(jù)點位置用加號標出胰舆,不同的數(shù)值代表不同的加號
lines(x,tan(x),type="b",lty=1,pch=4,col=6)#type=b表示交替出現(xiàn)
title("legend(..., lty? =? c(2,? -1,? 1),? pch? =? c(NA,? 3,? 4),?
? ? ? merge? =? TRUE)", cex.main? =? 1.1)#cex.main標題字體大小
legend(-1,1.9,c("sin","cos","tan"),col=c(3,4,6),text.col= "green4",
? ? ? lty= c(2,-1,1),pch=c(NA,3,4), merge =TRUE, bg="gray90")
#-1骚露,1.9 表示圖例放的位置,text.col是圖例里面字體的顏色缚窿,bg是圖例背景顏色棘幸,merge=T居中對齊
#注意就是每一項的信息跟上面的函數(shù)信息一一對應,沒有的位置就用NA
#不同數(shù)字代表不同類型eg不同顏色倦零,不同線型
y <- function(x)log(x)+sqrt(x)+x^(1/3)
plot(y,1,1000,main=expression(y=log(x)+sqrt(x)+sqrt(x,3)),lwd=3,col="blue")
#用expression在標題中寫數(shù)學表達式(1)
text(600,20,expression(paste(bgroup("(",atop(n,x),")"), p^x, q^{n-x})))
#用expression在圖里面600误续,20的位置標注數(shù)學表達式(2)
#用paste把bgroup("(",atop(n,x),")"),p^x, q^{n-x}三個粘貼到一起
text(800,30,expression(paste(bgroup("{",atop(n,k),"}"), p^k, q^{n-k})))
title(expression(x%in%A))#體會不同數(shù)學表達式的寫法x%in%A x屬于A
#也可以不用main扫茅,用title加標題蹋嵌,配合expression寫數(shù)學表達式(3)
par(family="Sarasa Gothic CL")#這個命令運行后就可以使用中文字體了
#交互式命令 locator,identify
x = rnorm(10)#產(chǎn)生十個隨機數(shù)
plot(x)
locator(5,"o")
text(locator(1), "Outlier", adj=0)#把文字寫到你點的地方
#當你畫了一個散點圖葫隙,你想把其中幾個點連成折線栽烂,就用locator命令,數(shù)字表示你想點幾個點
#這樣你點到的那些點他就會給你連起來,也可以不是你畫出來散點圖中的點腺办,圖里所有的位置都可以
require(graphics)
hca<- hclust(dist(USArrests))
plot(hca)
(x <- identify(hca))#identify分層聚類焰手,點上面的分支豎線,他就會把你點的那一類分支包括起來
#當你執(zhí)行了交互式命令時怀喉,運行窗口有一個紅色的圈寫著stop书妻,當你點完想點的,就點stop結(jié)束交互
x<-1:100
y<-sin(x)
plot(x,y,type = "l")
identify(40,1,"標一下") #你需要在坐標位置[40,1]那里點擊一下磺送,添加文字驻子,點到別處則會出錯
#par命令
#一、關(guān)于顏色
opar<-par(no.readonly=TRUE)? #have a try to write par(no.readonly=TRUE)
#把默認的參數(shù)都存下來估灿,存到opar里崇呵,最后再恢復它,以免畫后面的圖受到用par設(shè)置的參數(shù)的影響
x<-seq(1,10,length.out=100)-5#每個數(shù)據(jù)都要剪掉5
y<-c(log(x[x>0]),log(abs(x[x<=0])))
par(fg="red")#前景顏色
par(bg="yellow")#背景顏色
par(col='purple')#里面畫的線的顏色
par(col.axis='green',col.lab="white")#坐標刻度值的顏色馅袁,坐標軸名字的顏色
plot(x,y, type="l")
title(main="BlackbgAndRedfg",col.main="pink",sub="Byprogram-dog.blogspot.com",
? ? ? col.sub="blue")
par(opar)# par恢復默認參數(shù)域慷,這樣你后面畫的圖還是默認的設(shè)置(如默認顏色等)
#也可以不用opar,直接把昨天窗口掃空也行
par(fg="red",bg="yellow",col='purple',main="BlackbgAndRedfg",col.main="pink",
? ? sub="Byprogram-dog.blogspot.com",col.sub="blue")#可以把上面的都合并到par里
#注意要把par放在高級做圖命令plot之前汗销,才能顯示出par里的條件信息
#二犹褒、關(guān)于字體
#1】font 可以分別設(shè)置部分字體 粗體斜體粗斜體
opar<-par(no.readonly=TRUE)
x<-seq(-10,10,length.out=100)
y<-sin(x)
par(font.axis=1)# 1 normal
par(font.lab=2)#? 2 bold
par(font.main=3)# 3 italic (type)
par(font.sub=4)#? 4 bold Italic
plot(x,y,type='l')
title(main="fontstyle",xlab = "粗體", sub="Byprogram-dog.blogspot.com")
par(opar)
#2】family 統(tǒng)一設(shè)置全部字體 宋體,黑體弛针,楷體 serif", "sans" and "mono"
dev.new()
opar<-par(no.readonly=TRUE)
par(mfrow=c(4,1))
x <-? -10:10
y <-? -(x^2)
par(family="mono")? #mono字體
plot(x,y,type='l')
title(main="family mono style",sub="Byprogram-dog.blogspot.com")
par(family="")? #默認字體default
plot(x,y,type='l')
title(main="family default style",sub="Byprogram-dog.blogspot.com")
par(family="serif")? #serif字體
plot(x,y,type='l')
title(main="family serif style",sub="Byprogram-dog.blogspot.com")
par(family="sans")? #sans字體
plot(x,y,type='l')
title(main="family sans style",sub="Byprogram-dog.blogspot.com")
par(opar)# Restoring the parameters of par
#三叠骑、關(guān)于字號
#1】ps直接設(shè)置磅值(字號大小),只能設(shè)置全部字體
opar<-par(no.readonly=TRUE)
x <- seq(-10,10,length.out=100)
y <- log(x^2)
dev.new( )
par(mfrow=c(3,1))
par(ps=10)#10
plot(x,y,type='l')
title(main="fontsize: ps=10",sub="Byprogram-dog.blogspot.com")
par(ps=15)#15
plot(x,y,type='l')
title(main="fontsize: ps=15",sub="Byprogram-dog.blogspot.com")
par(ps=20)#20
plot(x,y,type='l')
title(main="fontsize:ps=20",sub="Byprogram-dog.blogspot.com")
par(opar)
#2】cex取normal情況下的倍數(shù) par(cex.main=1.5)削茁,可以只改部分字體
opar<-par(no.readonly=TRUE)
x<-seq(-10,10,length.out=100)
y<-sin(log(x^2))
dev.new()
par(mfrow=c(2,1))
par(cex.main=1)
plot(x,y,type='l')
title(main="fontsize:cex.main=1",sub="Byprogram-dog.blogspot.com")
par(cex.main=1.5)
plot(x,y,type='l')
title(main="fontsize:cex.main=1.5",sub="Byprogram-dog.blogspot.com")
par(opar)
#cex也可以取ps的倍數(shù) par(ps=20,cex.main=0.5)
opar<-par(no.readonly=TRUE)
x<-seq(-10,10,length.out=100)
y<-sin(log(x^2))
dev.new()
par(mfrow=c(2,1))
par(ps=20,cex.main=0.5)
plot(x,y,type='l')
title(main="fontsize:cex.main=1",sub="Byprogram-dog.blogspot.com")
par(ps=20,cex.main=1.5)
plot(x,y,type='l')
title(main="fontsize:cex.main=1.5",sub="Byprogram-dog.blogspot.com")
par(opar)
#cex.axis? ? for axis 坐標刻度值的字號
#cex.lab? ? for labels坐標軸名字的字號
#cex.main? ? for title主標題的字號
#cex.sub? ? for sub-title副標題的字號
#四宙枷、關(guān)于線型 lty
#Style of line,1: full line茧跋;實線2: dashed line慰丛;虛線3: dotted line;
#點化線4: dot-dashed line瘾杭;5: long dashed line
opar<-par(no.readonly=TRUE)
x<-seq(-10,10,length.out=100)
y<-sin(log(x^2))
par(lty=1)
plot(x,-y,type='l',col="red",ylim=c(-3,3))
par(lty=2)
lines(x,y,type='l',col="blue")
title(main="lty",sub="Byprogram-dog.blogspot.com")
par(opar)
#五诅病、關(guān)于標識符,一個數(shù)據(jù)點給一個標識符
#pch 0~25種
x<-seq(-10,10,length.out=20)
y1<-0.1*x^2
y2<-0.2*x^2
y3<-0.4*x^2
y4<-0.8*x^2
y5<-1.6*x^2
y6<-3.2*x^2
par(pch=1)#pch1 圓圈
plot(x,y1,type='b',col="red",xlim=c(0,5))
par(pch=2)#pch2 三角
lines(x,y2,type='b',col="blue")
par(pch=3)#pch3 加號
lines(x,y3,type='b',col="green")
par(pch=4,lty=3)#pch4 乘號
lines(x,y4,type='b',col="red")
par(pch=0)#pch5 正方形
lines(x,y5,type='b',col="blue")
par(pch=6)#pch6 倒三角
lines(x,y6,type='b',col="green")
title(main="pch",sub="Byprogram-dog.blogspot.com")
par(opar)
plot(x,y1,type='b',col="red",xlim=c(0,5),pch=5)#也可以直接把pch放plot里
#六、線寬 #lwd 線寬 cex 標識符寬
opar<-par(no.readonly=TRUE)
x<-seq(1,10,length=20)
y<-1/x
dev.new()
par(mfrow=c(2,1))
plot(x,y,type="b",pch=2,cex=5,lty=3,lwd=1)
title(main="lwd=2 and cex=2",sub="Byprogram-dog.blogspot.com", cex.sub=0.5)
plot(x,y,type="b",pch=2,cex=1,lty=3,lwd=5)
title(main="lwd=1andcex=1",sub="Byprogram-dog.blogspot.com",cex.sub=0.5)
par(opar)
#
x<-seq(1,10,length.out = 20)
y<-1/x
dev.new()
par(pch=2,cex=2,lty=3,lwd=2,mfrow=c(2,1))#1
plot(x,y,type="b")
par(pch=2,cex=0.5,lty=3,lwd=1)#2
plot(x,y,type="b")
#把命令從plot里拿出來粥烁,要注意1.mfrow命令要放在第一個par命令的后面
#2.cex放在par里面就是改了全部的字體大小贤笆,而不是只改了標識符寬
#一定要明確par參量的意義,即在恢復默認設(shè)置之前页徐,畫圖用到的參量都以par設(shè)置的為準
#若plot里也有對par里面設(shè)置出的參量做重新設(shè)置苏潜,那么以后設(shè)置的為準
#七、分界面
par(mfcol=c(3,2))#分作圖界面变勇,先按列走
par(mfrow=c(3,2))#分作圖界面恤左,先按行走
#建模1】最近鄰居算法 K-NN
#根據(jù)離A最近的鄰居的種類取類比推斷出A的類別贴唇,重點在如何判斷“最近”
#先把數(shù)據(jù)的指標畫到坐標圖中,再找到圖中離待判斷值比較近的點飞袋,作為序列樣本
#再計算待判斷值跟圖中各點的距離戳气,按大小排列好順序標號,選取最近鄰居個數(shù)k巧鸭,
#看k里最多的種類是什么瓶您,用此來估計待測值的類別,注意k取的不同結(jié)果可能不同
#k的選取應該在兩個極端值(1 跟 全部數(shù)據(jù))之間纲仍,一般是圖中離待判斷值比較近的點的個數(shù)
tomato <- c(6,4)
grape <- c(8,5)
orange <- c(7,3)
sqrt(sum((tomato-grape)^2))
sqrt(sum((tomato-orange)^2))#計算兩點之間的距離
#數(shù)據(jù)預處理
#1 數(shù)據(jù)的范圍壓縮(歸一化):把每一列數(shù)據(jù)等比例壓縮至同一范圍(0~1)呀袱,不改變相對大小關(guān)系
#方法1,同除以每列的最大值
#方法2郑叠,Xnew=[X-min(X)]/[max(X)-min(X)]
#方法3夜赵,壓縮至(-1,1)之間乡革,用概率 Xnew=[X-Mean(X)]/StdDev(X)(標準差)
#不預處理寇僧,一些小的數(shù)據(jù)對距離的影響就會很小,量綱大的占優(yōu)勢沸版,這樣相對位置就不太準確
#2 把字符變量變成數(shù)值變量嘁傀,便于距離計算 eg:male=1;female=0
iris <iris
sqrt(sum((iris[1,1:4]-iris[150,1:4])^2))#依據(jù)前四列數(shù)據(jù)视粮,計算第1朵花跟150朵花的距離
#一细办、讀數(shù)據(jù)
setwd('//Users//wangxinran//Desktop//R語言')
#判斷一個病人是否得病,依據(jù)knn算法蕾殴,將該病人的指標與數(shù)據(jù)庫內(nèi)的數(shù)據(jù)比較蟹腾,由最近鄰居得出結(jié)論
wbcd <- read.csv('wisc_bc_data.csv',stringsAsFactors = F)#讀入數(shù)據(jù),把因子變量轉(zhuǎn)換成字符型
#二区宇、查看并分析數(shù)據(jù),做簡單處理
str(wbcd)#看各類數(shù)據(jù)的類型分別是什么值戳,diagnosis這一列就顯示成chr 而不是 factor
wbcd <- wbcd[,-1]#去掉第一列议谷,即id
table(wbcd$diagnosis)#看看樣本里良性惡性分別是多少,以此來看樣本數(shù)據(jù)是否合理
#盡量讓各類樣本在數(shù)據(jù)庫里的比重均衡
wbcd$diagnosis <- factor(wbcd$diagnosis,levels=c("B","M"),labels="Benign","Malignant")
#想把第一列的字符B堕虹、M寫成它完整的單詞命名卧晓,要先改回成因子型,在用labels改名
summary(wbcd[c("radius_mean","area_mean","smoothness_mean")])
#查看數(shù)值型變量的一些情況赴捞,1st Qu 四分之一分為數(shù) 3st Qu 四分之三分為數(shù)
#三逼裆、歸一化
normalize <- function(x){
? return((x-min(x))/(max(x)-min(x)))
}#自定義一個歸一化函數(shù),對數(shù)據(jù)做預處理,x代表一列向量赦政,return表示要該函數(shù)的返回值
wbcd_n <- as.data.frame(lapply(wbcd[,2:31],normalize))#對數(shù)據(jù)的2~31列歸一化
summary(wbcd_n$radius_mean)#查看一下歸一化是否成功
#四胜宇、取數(shù)據(jù)
wbcd_train <- wbcd_n[1:469,]#取一部分數(shù)據(jù)做訓練樣本耀怜,注意訓練樣本都是數(shù)值型的,也叫
#訓練特征數(shù)據(jù)桐愉,所以應在歸一化后的wbcd_n里取
wbcd_train_labels <- wbcd[1:469,1]#取訓練標簽(對應訓練樣本是良性還是惡性)财破,注意
#要去wbcd里取,因為歸一化的數(shù)據(jù)框里已經(jīng)沒有diagnosis這一列了
wbcd_test <- wbcd_n[470:569,]#取測試樣本从诲,也叫測試特征數(shù)據(jù)
wbcd_test_labels <- wbcd[470:569,1]#取測試標簽
#從920行開始左痢,如果怕弄錯到底是從wbcd里取,還是從wbcd_n里取系洛,可以先把標簽跟歸一化的數(shù)據(jù)
#合并成wbcd_n_1俊性,再統(tǒng)一從取wbcd_n_1里取
wbcd_n_1 <- cbind(wbcd$diagnosis,wbcd_n)
wbcd_train_1 <- wbcd_n_1[1:469,2:31]
wbcd_train_1_labels <- wbcd_n_1[1:469,1]
wbcd_test_1 <- wbcd_n_1[470:569,2:31]
wbcd_test_1_labels <- wbcd_n_1[470:569,1]
#五、引入模型計算
library(class)#取class包是為了要用里面的knn模型
wbcd_test_pred<- knn(train = wbcd_train, test = wbcd_test,? ? ? ?
? ? ? ? ? ? ? ? ? ? cl = wbcd_train_labels, k = 21)
#直接用建模模型knn函數(shù)來計算測試樣本的標簽描扯,看看跟我們選出來的真正的測試標簽有多大差距
#若差距不大定页,說明我們?nèi)〉膋跟建立的knn模型比較合適,可以用來做良性惡性的判斷
#一般先讓k等于訓練樣本數(shù)開平方荆烈,注意knn里的各個元素別喂錯了
#六拯勉、評價模型 1.table 2.CrossTable
#1.
table(wbcd_test_pred,wbcd_test_labels)#wbcd_test_pred模型得到的,wbcd_test_labels真實的
#評價模型憔购,統(tǒng)計用模型測出來的良性惡性跟真實的良性惡性分別是多少宫峦,
#并且可以簡單驗證,統(tǒng)計出來主對角線上的結(jié)果是判斷對了的個數(shù)玫鸟,其他位置是判斷錯誤的個數(shù)
#2.
install.packages("gmodels")#用這個包里的CrossTable來評價模型
library('gmodels')
CrossTable(wbcd_test_pred,wbcd_test_labels)#CrossTable叫混淆矩陣导绷,把模型得到的跟真實的
#混在一起比較,橫縱變量交叉點就是兩者重合的屎飘,即正確的妥曲,其余是模型判斷有誤的
#表格最前面的Cell Contents會告訴你表格里每一個數(shù)據(jù)的意思
#Chi-square contribution卡方貢獻率
CrossTable(wbcd_test_pred,wbcd_test_labels,chisq = F)
#七、模型的改進 1.更換歸一化的方法 2.跟換k
#1.
wbcd_z<- as.data.frame(scale(wbcd[-1]))#scale壓縮數(shù)值型數(shù)據(jù)钦购,把每個數(shù)據(jù)減均值除以標準差
summary(wbcd_z$area_mean)
wbcd_train <- wbcd_z[1:469,]
wbcd_train_labels <- wbcd[1:469,1]
wbcd_test <- wbcd_z[470:569,]
wbcd_test_labels <- wbcd[470:569,1]
wbcd_test_pred<- knn(train = wbcd_train, test = wbcd_test,
? ? ? ? ? ? ? ? ? ? cl = wbcd_train_labels, k = 21)
table(wbcd_test_labels,wbcd_test_pred)#發(fā)現(xiàn)錯的更多了
#2
wbcd_test_pred<- knn(train = wbcd_train, test = wbcd_test,
? ? ? ? ? ? ? ? ? ? cl = wbcd_train_labels, k = 15)
table(wbcd_test_labels,wbcd_test_pred)#測試不同的k看哪個好
#用knn實驗iris數(shù)據(jù)
iris <- iris
#觀察數(shù)據(jù):由于iris數(shù)據(jù)的species是按順序排列的檐盟,直接取前100個數(shù)據(jù)是不行的
normalize <- function(x){
? return((x-min(x))/(max(x)-min(x)))
? }
iris_n <- as.data.frame(lapply(iris[,1:4],normalize))
#第一種選數(shù)據(jù)的方法 打亂排列順序,再隨機選取
index <- sample(150,120)#隨機產(chǎn)生1~150的行號,隨機取里面的120個
iris_train <- iris_n[index,]
iris_train_labels <- iris[index,5]
iris_test <- iris_n[-index,]
iris_test_labels <- iris[-index,5]
library(class)
iris_test_pred<- knn(train = iris_train, test = iris_test,? ? ? ?
? ? ? ? ? ? ? ? ? ? cl = iris_train_labels, k = 11)
table(iris_test_labels,iris_test_pred)#產(chǎn)生的sample行號不同,結(jié)果不同
#k-折交叉驗證 因為sample是隨機產(chǎn)生的押桃,所以每次測試樣本的結(jié)果都不一樣葵萎,為了判斷模型是否
#有效,可以多測試幾次不同的sample唱凯,取成功結(jié)果的比例的平均值
#第二種取數(shù)據(jù)的方法 每一類隨機取一部分
table(iris$Species)#看每一類有幾個
index1 <- sample(50,40)#隨機產(chǎn)生1~50羡忘,50個行標隨機取40個
index2 <- sample(51:100,40)#隨機產(chǎn)生第51~100個行標隨機取40個
index3 <- sample(101:150,40)#隨機產(chǎn)生第101~150個行標隨機取40個
iris_train <- iris_n[c(index1,index2,index3),]
iris_train_labels <- iris[c(index1,index2,index3),5]
iris_test <- iris_n[-c(index1,index2,index3),]
iris_test_labels <- iris[-c(index1,index2,index3),5]
library(class)
iris_test_pred<- knn(train = iris_train, test = iris_test,? ? ? ?
? ? ? ? ? ? ? ? ? ? cl = iris_train_labels, k = 11)
table(iris_test_labels,iris_test_pred)
#第三種取數(shù)據(jù)的方法 每一類順序取前40個
iris_train <- iris_n[c(1:40,51:90,101:140),]
iris_train_labels <- iris[c(1:40,51:90,101:140),5]
iris_test <- iris_n[-c(1:40,51:90,101:140),]
iris_test_labels <- iris[-c(1:40,51:90,101:140),5]
library(class)
iris_test_pred<- knn(train = iris_train, test = iris_test,? ? ? ?
? ? ? ? ? ? ? ? ? ? cl = iris_train_labels, k = 11)
table(iris_test_labels,iris_test_pred)
#第四種取數(shù)據(jù)的方法 打亂排列順序,再順序選取
index<-sample(150)
iris<-iris[index,]
iris_n<-iris_n[index,]
iris_train<-iris_n[1:120,]
iris_train_labels<-iris[1:120,5]
iris_test<-iris_n[121:150,]
iris_test_labels<-iris[121:150,5]
iris_test_pred<- knn(train = iris_train, test = iris_test,
? ? ? ? ? ? ? ? ? ? cl = iris_train_labels, k = 11)
table(iris_test_pred,iris_test_labels)
#發(fā)現(xiàn):就算用樣本數(shù)據(jù)去測試樣本數(shù)據(jù),結(jié)果也不一定全部成功
#第七章 讀取及存儲文件
#read.table一般用于讀txt文件磕昼,其數(shù)據(jù)之間的分隔符號是空格形式卷雕,read.table讀取空格分隔的數(shù)據(jù)
#read.csv一般用于讀取csv文件,其數(shù)據(jù)之間的分隔符號是逗號形式票从,read.csv讀取逗號分隔的數(shù)據(jù)
#當用read.table去讀csv文件時漫雕,要用sep把分隔符改成逗號滨嘱。read.csv則不用
#當用read.csv去讀txt文件時,要用sep把分隔符改成空格蝎亚。read.table則不用
#>藕ⅰ!在讀數(shù)據(jù)之前发框,要先看看數(shù)據(jù)之間的分隔符號躺彬,在讀取時用sep把數(shù)據(jù)之間的格式修改
setwd('//Users//wangxinran//Desktop//R語言')
wine178 <- read.table(file='wine178.csv',header=T,sep=',')
wine178_1 <- read.csv(file='wine178.csv',header=T)
winequality_white <- read.csv(file='winequality-white.csv',sep=';')
winequality_white_1 <- read.table(file='winequality-white.csv',header=T,sep=';')
#read.table默認header=F,想要表頭必須要加header=T梅惯,但read.csv默認header=T宪拥,可以不加
winequality_white_2 <- read.csv2(file='winequality-white.csv')
#read.csv2讀取時默認數(shù)據(jù)之間的分隔符號是分號;铣减,
HW <- read.table(file='HW.txt',header=T)
HW_1 <- read.csv(file='HW.txt',sep='',header=T)
usedcars <- read.table(file="usedcars.csv",sep=',',header=T)
usedcars_1 <- read.table("usedcars.csv")
str(usedcars)
mushrooms <- read.csv(file='mushrooms.csv')
mushrooms_1 <- read.table(file='mushrooms.csv',header=T,sep=',')
str(mushrooms)
#讀取excel文件
install.packages('readxl')
library('readxl')
#安裝'readxl'后用read_excel()命令可以讀excel文件
#或者把.xls她君、.xlsx文件轉(zhuǎn)化成.csv或.txt文件,再來讀取葫哗,直接文件另存為就行了
temp_1 <- read_excel('temp_1.xlsx')
#也可以用如s下方法:File-》input dataset -》from excel-》把文件名跟位置拷貝過來
score <- sample(85:100,36,replace=T)#隨機產(chǎn)生在85~100之間的數(shù)字36個
temp_1$score <- score#把score添加到temp_1表格中缔刹,新添一列
#readLines 讀取純文本
abstract <- readLines('abstract.txt')#讀入文件,逐行讀取文本
abstract
data<-readline()#從鍵盤中一行一行獲取信息
#從鍵盤中輸入想要的文字: I am a student
data
#用scan讀數(shù)據(jù)
wine178_scan <- scan(file='wine178.csv',sep=',',skip=1)#skip=1向下一行再讀,第一行不要
#scan()讀取速度比較快,適用于大型數(shù)據(jù)垦细,但第一行的字符型數(shù)據(jù)讀不進去,且讀進來不是數(shù)據(jù)框形式
#需要做如下改變鸟廓,變成數(shù)據(jù)框并且加上表頭第一行
wine178_Matrix <- matrix(wine178_scan,nrow=178,byrow=T)
wine178_dataframe <- as.data.frame(wine178_Matrix)
colnames(wine178_dataframe) <- c('Alcohol','Malic' ,'acid', 'Ash Alcalinity of ash' ,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 'Total' ,'phenols', 'Flavanoids','Nonflavanoid','phenols'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ,'Proanthocyanins', 'Color', 'intensitys' ,'Hue','wines')
usedcars_scan <- scan(file='usedcars.csv',what='character',sep=',',skip=1)
#如果數(shù)據(jù)是字符形式,要加what='character'襟己,數(shù)據(jù)是numbeic不要緊
usedcars_Matrix <- matrix(usedcars_scan,nrow = 150,byrow = T)
usedcars_dataframe <- as.data.frame(usedcars_Matrix)
colnames(usedcars_dataframe) <- c('year','model','price','mileage','color','transmission')
#用write儲存文件,將temp_1文件以新的文件名存儲到指定目錄下
write.table(temp_1,file="http://Users//wangxinran//Desktop//R語言//temp_2.txt")
write.csv(temp_1,file="http://Users//wangxinran//Desktop//R語言//temp_3.csv")
#也可以先將該目錄改成當前目錄引谜,再儲存時就不用指定了
setwd('//Users//wangxinran//Desktop//R語言')
write.table(temp_1,file="temp_2_2.txt")#write.table儲存txt文件
write.csv(temp_1,file="temp_3_2.csv")#write.csv儲存csv文件
write.csv(temp_1,file="temp_3_3.csv",row.names = F)#儲存時不要行名字
write.table(temp_1,file="temp_2_3.txt",row.names = F,quote=F) #quote=F去掉雙引號
iris <- iris
iris_sub <- iris[,1:4]
write.table(iris_sub,file='iris_sub.txt')
write.csv(iris_sub,file ='iris_sub.csv' )
#用cat存儲一些新產(chǎn)生的數(shù)據(jù)到當前目錄下
setwd('//Users//wangxinran//Desktop//R語言')
cat(1:10,file='temp11.txt')
cat(cbind(iris$Sepal.Length,iris$Petal.Length),file='iris_length.txt')
#用save存儲.Rdata類型的文件,它是R語言下自己的文件格式擎浴,必須用R語言打開
setwd('//Users//wangxinran//Desktop//R語言')
save(iris_sub,file='iris_sub.Rdata')
save(list=ls(all=T),file="alldata.Rdata")#把environment里所有變量存盤
#給數(shù)據(jù)排序 sort rank order
S <- sample(40:55,8,replace=T)
sort(S)#把數(shù)據(jù)從小到大排序
sort(S,decreasing = T)#把數(shù)據(jù)從大到小排序
y <- c("wxr","bzx","skm","lxy")
sort(y)
#先按首字母排员咽,如果首字母一樣就比較第二個字母
order(S)#給出數(shù)據(jù)從小到大,在原始數(shù)據(jù)S中所在的位置
#給某個數(shù)據(jù)排序
library('readxl')
temp_1 <- read_excel('temp_1.xlsx')
score <- sample(85:100,36,replace=T)#隨機產(chǎn)生在85~100之間的數(shù)字36個
temp_1$score <- score#把score添加到temp_1表格中贮预,新添一列
order(temp_1$score)#顯示第一個數(shù)據(jù)在原始數(shù)據(jù)中排第幾骏融,第二個數(shù)據(jù)在原始數(shù)據(jù)中排第幾....
temp_2 <- temp_1[order(temp_1$score),]#給temp_1按成績排序
S <- sample(40:55,8,replace=T)
S
rank(S)
#表示原始數(shù)據(jù)在排序后的序列里的位置,如果有相同數(shù)據(jù)排序萌狂,那么這個位置就取兩個位置的平均值
#第一個數(shù)據(jù)在新數(shù)據(jù)中按從小到大順序應該排第幾,第二個...
#stack 自我補充,不作要求
#stack()函數(shù):(堆棧的意思)
#長寬型數(shù)據(jù)的轉(zhuǎn)換怀泊,長型:堆棧茫藏,數(shù)據(jù)間有不同的分類(如同屬一類);寬型:數(shù)據(jù)內(nèi)容相對唯一
freshman <- c(12,23,24)
sophomores <- c(25,36,73)
juniors <- c(32,46,57)
data.frame(fr= freshman,so = sophomores,jun = juniors)
height <- stack(list(fresh =freshman,sopho = sophomores,juni = juniors))
height
tapply(height$values,height$ind,mean)? #按照分類求均值
#練習霹琼,打開temp_1.xlsx文件务傲,隨機產(chǎn)生性別跟成績凉当,按成績排序,并按性別求平均值
setwd('//Users//wangxinran//Desktop//R語言')
library('readxl')
temp_1 <- read_excel('temp_1.xlsx')
score <- sample(85:100,36,replace=T)
temp_1$score <- score
temp_1 <- temp_1[order(temp_1$score),]
sex <- sample(c("F","M"),36,replace=T)
temp_1$sex <- sex
tapply(temp_1$score,temp_1$sex,mean)
write.csv(temp_1,file="temp_1.csv")
#條件判斷及循環(huán)
x<-3
y<-5
if(x<4)print("I want to go to school !")
if(x<1)print("I want to go to school !")
if(TRUE)print("I want to go to school !")
if(x<4|y>8)print("I want to go to school !")
if(x<4&y>8)print("I want to go to school !")
if(x>5)print('x>5')else print("x<=5")
if(x>5)print("I want to go to school !")else #注意else必須跟if在同一行
? print("I stay at home")
if(x>4){
? z = x+y;
? print("z is :")
? print(z)
}else
? {
? print("z is not exist")
}#條件滿足的情況下售葡,{}內(nèi)所有的語句都會執(zhí)行,條件不滿足時執(zhí)行else里所有的語句
#注意else必須緊跟在if結(jié)束的}位置
#if看杭、else開始的{可以不緊跟在他們各自的后面,可以寫在下一行
#如果if else在for循環(huán)里挟伙,else就可以不緊跟在if后面楼雹,可以寫在下一行
teens <- read.csv("snsdata.csv")
teens <- ifelse(teens$age>15&teens$age<18,teens$age,NA)
#for循環(huán)
sum_x <- 0
x <- c(3,8,7,2,1,3,9,60,30,12)
for(i in x){
? sum_x <- sum_x+i
}
sum_x
y <- 0
for(i in 1:dim(iris)[1]){
? y <- y+iris$Sepal.Length[i]
}
y#求150個iris$Sepal.Length數(shù)據(jù)的和,dim(iris)[1]是iris的行數(shù):150
y/dim(iris)[1]#求Sepal.Length的平均值
S <- 0#賦初值
for(n in 1:(10^5)){
? S <- S+sqrt(3)/(2^n)
}
S
iris_na <- iris
for(i in 1:4){
? iris_na[sample(1:nrow(iris),5,replace = F),i] <- NA
}
#在iris數(shù)據(jù)的第1~4列中尖阔,每一列里面都從150行里隨機抽取5行(且不重復),把該位置數(shù)據(jù)變成NA
which(is.na(iris_na$Sepal.Length))#找到iris_na$Sepal.Length里NA所在的位置是第幾行
for(i in 1:4){
? iris_na[which(is.na(iris_na[,i])),i] <- mean(iris_na[,i],na.rm=T)
}
iris_na
# 把每一列里NA的位置贮缅,用這一列除了NA之外的數(shù)據(jù)所計算出來的平均值代替
mean(c(2,4,NA,6,8),na.rm=T)#na.rm=T去掉缺失值
#或者用以下方法,先求均值介却,再進行for循環(huán)
Mean_value <- sapply(iris_na[,1:4],mean,na.rm=T)
for(i in 1:4){
? iris_na[which(is.na(iris_na[,i])),i] <- Mean_value[i]
}
iris_na
#while
S <- 0
n=1
while(n<=(10^5)){
? S <- sqrt(3)/(2^n)
? n=n+1
}
S
#repeat
f <- vector()
f[1] <- 1
f[2] <- 1
i=3
repeat{
? f[i]=f[i-1]+f[i-2]
? if((f[i])>=1000)break
? i <- i+1
}
f
#switch 給它一個執(zhí)行的位置比如1谴供,它就執(zhí)行第一個位置的操作
i=1
switch(i,mean(1:10),rnorm=10,print("I Love you"))#執(zhí)行mean(1:10)求均值(第一項)
switch(i+1,mean(1:10),rnorm=10,print("I Love you"))#執(zhí)行rnorm=10產(chǎn)生10個隨機數(shù)(第二項)
switch(i+2,mean(1:10),rnorm=10,print("I Love you"))#執(zhí)行print(第三行)
set.seed()#()填初始種子點,隨便填個自然數(shù)就行
#在執(zhí)行rnorm或sample時先執(zhí)行set.seed(自然數(shù)),就可以使每次產(chǎn)生的隨機數(shù)都是一樣的
#注意齿坷,每次都要運行一遍seed
set.seed(1)
rnorm(10)#rnorm產(chǎn)生服從標準正態(tài)分布的數(shù)
set.seed(113)
sample(85:100,10,replace = T)
#定義自己的函數(shù)
my_fun <- function(x,y) sin(x)+2*y
my_fun(3,8)
#做一個復雜計算桂肌,用大括號
twosam <-? function(x1,? x2)? {
? n1? <-? length(x1);? n2? <-? length(x2)
? xb1? <-? mean(x1);? xb2? <-? mean(x2)
? s1? <-? var(x1);? s2? <-? var(x2)
? s? <-? ((n1-1)*s1? +? (n2-1)*s2)/(n1+n2-2)
? tst<-? (xb1? -? xb2)/sqrt(s*(1/n1? +? 1/n2))
? tst? ? ? #或者寫成? return(tst),? 還可以返回兩個量,比如:return(list(tst, s))
}#return兩個值的時候永淌,必須把他們放到list里
x1<-c(1,2,3,3,4,5,6,7,8)
x2<-c(2,4,5,8,9,8)
a<-twosam(x1,x2)
a
#畫分段函數(shù)圖像
#method 1
My_f =function(x)
{
? v1=2*x[x<=-1]+3
? v2=((x+3)/(x+3))[(x>-1)&(x<=1)]#1要換成(x+3)/(x+3)崎场,直接寫1會報錯
? v3=x[x>1]^2
? y=c(v1,v2,v3)
? return(y)
}
#下面調(diào)用函數(shù)
x=c(-5:5)
y=My_f(x)
plot(x,y,type='l')
#method2
My_fun <- function(x){
? if(x<=-1) y <- 2*x+3
? else if((x>-1)&(x<=1)) y <- 1
? else y <- x^2
? return(y)
}
x <- seq(-3,3,0.1)
y <- vector()#y不能直接調(diào)用函數(shù)產(chǎn)生,需要用for循環(huán)把它的值放到一個vector里
for(i in 1:length(x)){
? y[i] <- My_fun(x[i])
}#i指的是循環(huán)的次數(shù)仰禀,所以要注意(i in 1:length(x))而不是(i in x)
y
plot(x,y,type='l')
#定義一個二元運算
par(family="Sarasa Gothic CL")
"呵呵" <- function(x,y){cos(x)*sin(y)}
x <- c(1,2,3)
y <- c(4,5,6)
呵呵(x,y) #x"hehe"y不可用
"%!%"? <-? function(x, y)? {? cos(x)*sin(y)}
x<-c(1,2,3)
y<-c(4,5,6)
x%!%y #%!%(x,y)不可用
#函數(shù)的默認參數(shù)照雁,如果不再賦值就用默認參數(shù),后面如果有賦值答恶,就用新的值
#缺省參數(shù)饺蚊,把缺省參數(shù)"..."用大函數(shù)function里面的小函數(shù)比如summary來補上
my_func <- function(x, ...){
? print(x)
? summary(...)
}
my_func("This is iris data:", iris)
#函數(shù)里面的變量是局部變量,對全局沒有影響
#線性回歸
setwd('//Users//wangxinran//Desktop//R語言')
insurance.df <- read.table(file='Q1_Policies.txt',header=T)
#第一題悬嗓,求回歸系數(shù)? 0.5134
attach(insurance.df)
#attch之后污呼,在引用該數(shù)據(jù)中的某個變量就不用再寫$了,全部已用完后用detach釋放掉
insurance.lm <- lm(Policies~Quotes)#做回歸包竹,看回歸系數(shù)
insurance.lm <- lm(Policies~Quotes,data=insurance.df)#當attach了不止一個數(shù)據(jù)時燕酷,要用data指明
insurance.lm
summary(insurance.lm)#可以看到更多的回歸的結(jié)果
#Residual standard error 殘差的標準誤差(標準化殘差):3.451? 擬合數(shù)據(jù)的自由度:58
#R-squared決定系數(shù),越接近1說明模型擬合越好周瞎,一般一元回歸看Multiple苗缩,二元回歸看Adjusted
#*星號表示其對應量的顯著程度
#第二題, 求回歸系數(shù)的95%置信區(qū)間 [0.5134-2.001717*0.03308,0.5134+2.001717*0.03308]
qt(0.975,58)#求自由度為58的t分布的0.975分位數(shù)声诸,=2.001717
#0.03308是標準誤差Std. Error酱讶,可以從summary中得到
#第三題 用三種方法 P值、F分布彼乌、t分布 判斷上述求得的回歸系數(shù)在置信水平為95%時是否有效
#可以從summaty中得到t統(tǒng)計量跟F統(tǒng)計量 t value: 15.523 F-statistic:241
#也可以得到P值:p-value:< 2.2e-16,由于P<1-置信水平(0.05),所以我們算得的回歸系數(shù)有效
#我們可以通過計算F(置信水平)(p,n-p-1) 跟上述得到的F比較泻肯,看該回歸系數(shù)是否有效
qf(0.95,1,58)#求自由度是95%的F分布的(1,58)分位數(shù)
#算得qf(0.95,1,58)=4.006873<241,說明自變量對因變量有重要影響
#我們也可以通過計算t(1-置信水平) 跟上述得到的t比較渊迁,看該回歸系數(shù)是否有效
qt(0.05,58)
#算得qt(0.05,58)=-1.671553,其絕對值< 15.523,說明自變量對因變量有重要影響
#第四題 用該回歸去預測自變量是50時灶挟,因變量預測值的期望(E(y估計))的95%置信區(qū)間
predict(insurance.lm,data.frame(Quotes=50),se.fit=T,interval='confidence',level=0.95)
#predict(lm(y~x)琉朽,new,interval=“prediction”稚铣,level=0.95)
#——預測箱叁,lm(y~x)為之前通過訓練數(shù)據(jù)擬合的回歸方程;new為待預測的輸入數(shù)據(jù)榛泛,其類型必須為數(shù)據(jù)框
#interval='confidence'表明想要y的期望的區(qū)間估計蝌蹂,interval='prediction' 表明想要y的區(qū)間估計
#level是置信水平 se.fit=T表示需要標準誤差,=F則不需要
#結(jié)果中:fit表示自變量是50時因變量預測值(y估計)曹锨,lwr跟upr是你想求區(qū)間的上下限
#se.fit是E(y估計)公式中的最后一部分 df是擬合的自由度 residual.scale是殘差的標準誤差Sxx
#E(y估計)的置信區(qū)間=[y估計+t0.975(58)*se.fit,y估計-t0.975(58)*se.fit]
#第五題 用該回歸去預測自變量是50時孤个,因變量預測值(y估計)的95%置信區(qū)間
predict(insurance.lm,data.frame(Quotes=50),se.fit=T,interval='prediction',level=0.95)
#y估計的置信區(qū)間=[y估計+t0.975(58)*se.pred,y估計-t0.975(58)*se.pred]
#其中(se.pred)^2 = (se.fit)^2+(residual.scale)^2
#第六題 用該回歸去預測自變量是40時,因變量預測值(y估計)的95%置信區(qū)間
#還可以把五沛简、六題一起計算
predict(insurance.lm,data.frame(Quotes=c(50,40)),se.fit=T,interval='prediction',level=0.95)
plot(insurance.lm)#畫圖
#第一個圖 殘差大的數(shù)據(jù)在圖中被標注了出來齐鲤,殘差點最好是隨機分布的
residuals(insurance.lm)#計算殘差
rstudent(insurance.lm)#計算刪除學生殘差
which(abs(rstudent(insurance.lm))>=3)#看刪除學生殘差中有沒有大于3的,abs取絕對值
#第二個圖 qq圖椒楣,如果數(shù)據(jù)點基本在虛線附近(緊緊圍繞直線)给郊,說明樣本殘差符合正態(tài)分布
#第三個圖 標準化殘差方根散點圖,被標出來的點說明殘差方跟較大捧灰,對回歸影響不好淆九,可以剔除
#第四個圖 殘差與杠圖,橫坐標是杠桿值毛俏,縱坐標是殘差值炭庙,可以看兩者的范圍
#當杠桿值超過兩倍或三倍的h杠,就說有高杠桿值點煌寇,但超過的這些點是否是異常點還要結(jié)合cook距離
cooks.distance(insurance.lm)#看各樣本點的cook距離
hatvalues(insurance.lm)#看各樣本點的杠桿值
plot(insurance.lm,which=c(1:6))#可以畫出更多的圖焕蹄,比如cook距離
y=c(144,215,138,145,162,142,170,124,158,154,162,150,140,110,128,130,
? ? 135,114,116,124,136,142,120,120,160,158,144,130,125,175)
x=c(39,47,45,47,65,46,67,42,67,56,64,56,59,34,42,48,45,18,20
? ? ,19,36,50,39,21,44,53,63,29,25,69)
plot(y~x,type = 'p')
xueya_nianling.lm <- lm(y~x)
summary(xueya_nianling.lm)
plot(xueya_nianling.lm)
rstudent(xueya_nianling.lm)
which(abs(rstudent(xueya_nianling.lm))>=3)
cooks.distance(xueya_nianling.lm)
which(abs(cooks.distance(xueya_nianling.lm))>1)
h <-((1+1)/30)
2*h
3*h
x <- x[-2]
y <- y[-2]
xueya_nianling.lm <- lm(y~x)
summary(xueya_nianling.lm)
which(abs(rstudent(xueya_nianling.lm))>=3)
qt(0.975,27)
qf(0.95,1,27)
predict(xueya_nianling.lm ,data.frame(x=50),se.fit=T,interval='confidence',level=0.95)
predict(xueya_nianling.lm ,data.frame(x=50),se.fit=T,interval='prediction',level=0.95)
predict(xueya_nianling.lm ,data.frame(x=60),se.fit=T,interval='confidence',level=0.95)
#2
y=c(144,215,138,145,162,142,170,124,158,154,162,150,140,110,128,130,135,114,116,
? ? 124,136,142,120,120,160,158,144,130,125,175)
x1=c(39,47,45,47,65,46,67,42,67,56,64,56,59,34,42,48,45,18,20,19,36,50,39,21,44,
? ? 53,63,29,25,69)
x2=c(24.2,31.1,22.6,24.0,25.9,25.1,29.5,19.7,27.2,19.3,28.0,25.8,27.3,20.1,21.7,
? ? 22.2,27.4,18.8,22.6,21.5,25.0,26.2,23.5,20.3,27.1,28.6,28.3,22.0,25.3,27.4)
x3=c(0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,0,1)
Pressure.lm <- lm(y~x1+x2+x3)
summary(Pressure.lm)
plot(Pressure.lm)
#從圖上可以看出2號跟10號有些異常,現(xiàn)在用刪除學生殘差桿看一下
which(abs(rstudent(Pressure.lm))>=3)
#剔除2阀溶,10
y <- y[-c(2,10)]
x1 <- x1[-c(2,10)]
x2 <- x2[-c(2,10)]
x3 <- x3[-c(2,10)]
#重新做回歸
Pressure.lm <- lm(y~x1+x2+x3)
summary(Pressure.lm)
plot(Pressure.lm)
#重新檢測回歸
which(abs(rstudent(Pressure.lm))>=3)
which(abs(cooks.distance(Pressure.lm))>1)
predict(Pressure.lm,data.frame(x1=43,x2=23.2,x3=1),se.fit=T,
? ? ? ? interval='confidence',level=0.95)
predict(Pressure.lm,data.frame(x1=43,x2=23.2,x3=1),se.fit=T,
? ? ? ? interval='prediction',level=0.95)
#正態(tài)假設(shè)檢驗腻脏,單個正態(tài)總體,方差未知且相等t檢驗
#一银锻、右邊檢驗
X<-c(159,280,101,212,224,379,179,264,222,362,168,250,149,260,485,170)
t.test(X,alternative="greater",mu=225)
#看p值永品,>0.05,不能拒絕原假設(shè)击纬,接受H0
#計算t統(tǒng)計量qt(0.95,15)=1.75305鼎姐,與上述得到的t=0.66852比較,0.66852<1.75305,接受H0
#alternative hypothesis:顯示的是備擇假設(shè)症见,由此我們可以知道原假設(shè)
#mean of x 上述數(shù)據(jù)x的均值
#二、左邊檢驗
t.test(X,alternative="less",mu=225)
#p=0.743>0.05,接受H0
#計算qt(0.05,15),df表示自由度是15殃饿,0.66852>-1.75305谋作,接受H0
#由于左邊右邊的假設(shè)結(jié)果一個是mu<=225,一個是mu>=225,所以做雙邊假設(shè)
#三、雙邊假設(shè)
t.test(X,alternative="two.sided",mu=225)
#qt(0.975,15)=2.13145,0.66852絕對值<2.13145,接受原假設(shè)乎芳,所以最后答案 mu=225
#綜上遵蚜,這個題三種檢驗都要做,因為前兩種得到結(jié)果恰好相反奈惑,所以猜測只能取=號
#多個正態(tài)總體
#方法一
X<-c(78.1,72.4,76.2,74.3,77.4,78.4,76.0,75.5,76.7,77.3)
Y<-c(79.1,81.0,77.3,79.1,80.0,79.1,79.1,77.3,80.2,82.1)
t.test(X,Y,var.equal=TRUE, alternative="less")
#由p<0.05吭净,拒絕原假設(shè)
#qt(0.05,18)=-1.734064, -4.2957<-1.734064,拒絕原假設(shè)
#方法二肴甸,letZ=X-Y寂殉,mu=0,Z跟mu比較原在,該換成單個正態(tài)總體
t.test(X-Y,mu=0, alternative="less")
#qt(0.05,9)=-1.833113 -4.2018<-1.833113 拒絕原假設(shè)
#p=0.00115<0.05 拒絕原假設(shè)
#神經(jīng)網(wǎng)絡(luò)模型
#蠓蟲分類問題:現(xiàn)在有兩種蟲子Af友扰、Apf,根據(jù)數(shù)據(jù)判斷蟲子屬于哪一種
#每只蟲子有兩個數(shù)據(jù)庶柿,現(xiàn)在樣本有兩種蟲子分別是9只村怪、6只,根據(jù)樣本建立模型并測試
#讀入數(shù)據(jù)
MengChong<-read.table('MengChong.txt',sep=",",header = T)
#歸一化
normalize <- function(x) {
? return ((x - min(x)) / (max(x) - min(x)))
}
MengChong_n <- as.data.frame(lapply(MengChong[,1:2], normalize))
#取訓練樣本跟標簽浮庐、測試樣本跟標簽
train_data<-as.matrix(MengChong_n);
test_data<-as.matrix(MengChong_n);
train_labels<-as.numeric(MengChong[,3])
test_labels<-train_labels
#newff構(gòu)建神經(jīng)網(wǎng)絡(luò)
install.packages("AMORE")
library(AMORE)
net <- newff(n.neurons=c(2,8,2,1), learning.rate.global=1e-2, momentum.global=0.5,
? ? ? ? ? ? error.criterium="LMS", Stao=NA, hidden.layer="tansig",
? ? ? ? ? ? output.layer="purelin", method="ADAPTgdwm")
#神經(jīng)網(wǎng)絡(luò)有4層甚负,依次是:‘2’輸入層 2個圈、‘8’隱藏層 8個圈审残、‘2’隱藏層 2個圈梭域、‘1’輸出層 1個圈
#輸入層的圈個數(shù)是看輸入的每個樣本有幾個數(shù)據(jù),輸出層的圈個數(shù)是看輸出的樣本屬于幾個類別
#輸入訓練樣本用該網(wǎng)絡(luò)構(gòu)建一個訓練维苔,并把該訓練賦值為result
result <- train(net, train_data, train_labels, error.criterium="LMS",
? ? ? ? ? ? ? ? report=TRUE, show.step=100, n.shows=5 )
#用測試樣本測試上述訓練碰辅,看用該訓練得到的測試樣本的結(jié)果是什么
y <- sim(result$net, test_data)
#比較測試樣樣本真實的結(jié)果跟用訓練result產(chǎn)生的結(jié)果比較
y[which(y<1.5)] <- 1
y[which(y>=1.5)] <- 2
table(test_labels,y)
#計算該訓練的正確率
n=length(test_labels)
Sum = 0
for(i in 1:n){
? if(y[i]==test_labels[i]){
? ? Sum =Sum+1
? }
}
cat("正確率", (Sum/n)*100, "%")
#現(xiàn)在新來三只蟲子的數(shù)據(jù),想用訓練判斷他們的類別分別是什么
x<-rbind(c(1.24,1.80),c(1.28,1.84),c(1.40,2.04))
#用x儲存這三只蟲子的數(shù)據(jù)介时,一行是一只没宾,第一列是antenna,第二列是wing
#對新來這三只做歸一化沸柔,要用到原來訓練數(shù)據(jù)各個屬性值的最大和最小值
a<-x[,1]
b<-x[,2]
a1<-(a-min(MengChong[,1]))/(max(MengChong[,1])-min(MengChong[,1]))
b1<-(b-min(MengChong[,2]))/(max(MengChong[,2])-min(MengChong[,2]))
x_n<-cbind(a1,b1)
#輸入歸一化好的數(shù)據(jù)到訓練中循衰,用訓練判斷類別(即測試x_n)
y1 <- sim(result$net, x_n)
y1
#y1跟1接近,class就是1褐澎,跟2接近class就是2
#發(fā)現(xiàn)y1中的數(shù)據(jù)在1.5左右会钝,跟1和2都不太接近,需要修改
#方法一:修改網(wǎng)絡(luò)層中的第二層跟第三層的圈數(shù),重新訓練
net <- newff(n.neurons=c(2,8,1), learning.rate.global=0.5, momentum.global=0.5,
? ? ? ? ? ? error.criterium="LMS", Stao=NA, hidden.layer="tansig",
? ? ? ? ? ? output.layer="purelin", method="ADAPTgdwm")
#方法二 擴大樣本數(shù)據(jù)
#方法三 給樣本的每類數(shù)據(jù)加上不同的權(quán)重迁酸,關(guān)系大的一類權(quán)重大
#由于上述原數(shù)據(jù)相差不大先鱼,可以不用歸一化,如下:
train_data<-as.matrix(MengChong[,1:2]);
test_data<-train_data;
train_labels<-c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2)
test_labels<-train_labels
library(AMORE)
net <- newff(n.neurons=c(2,8,2,1), learning.rate.global=1e-2, momentum.global=0.5,
? ? ? ? ? ? error.criterium="LMS", Stao=NA, hidden.layer="tansig",
? ? ? ? ? ? output.layer="purelin", method="ADAPTgdwm")
result <- train(net, train_data, train_labels, error.criterium="LMS",
? ? ? ? ? ? ? ? report=TRUE, show.step=100, n.shows=5 )
y <- sim(result$net, test_data)
y[which(y<1.5)] <- 1
y[which(y>=1.5)] <- 2
table(test_labels,y)
n=length(test_labels)
Sum = 0
for(i in 1:n){
? if(y[i]==test_labels[i]){
? ? Sum =Sum+1
? }
}
cat("正確率", (Sum/n)*100, "%")
x<-rbind(c(1.24,1.80),c(1.28,1.84),c(1.40,2.04))
y1 <- sim(result$net, x)
y1
#神經(jīng)網(wǎng)絡(luò)之擬合
#樣本為每月的銷售量奸鬓,用來預測下一個月的銷售量
sales<-read.table('sales.txt',header = F)
sales_n<-(sales-min(sales))/(max(sales)-min(sales))
sales_T<-sales_n[4:9,]
Train_data<-rbind(sales_n[1:3,],sales_n[2:4,],sales_n[3:5,],
? ? ? ? ? ? ? ? ? sales_n[4:6,],sales_n[5:7,],sales_n[6:8,])#取訓練樣本的方法見圖片
Train_labels<-sales_T
Test_data<-Train_data
Test_labels<-sales_T
library(AMORE)
set.seed(12345)
net <- newff(n.neurons=c(3,5,1), learning.rate.global=1e-2, momentum.global=0.5,
? ? ? ? ? ? error.criterium="LMS", Stao=NA, hidden.layer="tansig",
? ? ? ? ? ? output.layer="purelin", method="ADAPTgdwm")
result <- train(net, Train_data, Train_labels, error.criterium="LMS", report=TRUE,
? ? ? ? ? ? ? ? show.step=100, n.shows=5 )
y <- sim(result$net, Test_data)
Y<-y*(max(sales)-min(sales))+min(sales)#返歸一化焙畔,把壓縮后的數(shù)據(jù)還原回去
real_Y<-sales[4:9,]#取出真實的值
plot(1:6,Y,xlim = c(1,6),ylim = c(1300,3000))
points(1:6,real_Y,col='blue',pch=15)#通過圖形來比較真實值跟擬合值
?newff #可以看到激活函數(shù)的種類
#用另一個包來建立神經(jīng)網(wǎng)絡(luò)
Train_data1<-cbind(Train_data,Train_labels)
#install.packages("neuralnet")
library(neuralnet)
set.seed(12345) # to guarantee repeatable results
as.data.frame(Train_data1)->Train_data1
sales_model <- neuralnet(formula = Train_labels~ V1 + V2 + V3,data =Train_data1)
#關(guān)于neuralnet包,要求數(shù)據(jù)用dataframe的形式串远,
#要先as.data.frame(Train_data1)->Train_data1把Train_data1轉(zhuǎn)換成數(shù)據(jù)框的形式
plot(sales_model)
model_results <- compute(sales_model, Test_data)
predicted_sales <- model_results$net.result
real_Y<-sales[4:9,]
y=predicted_sales
Y<-y*(max(sales)-min(sales))+min(sales)
plot(1:6,Y,xlim = c(1,6),ylim = c(1300,3000))
points(1:6,real_Y,col='blue',pch=15)
#sign()a符號函數(shù)宏多,輸入負數(shù)輸出-1,輸入正數(shù)輸出1澡罚,輸入0輸出0
#計算例題output
#method 1
w1 <- 0.3
w2 <- 0.4
w3 <- 0.5
x1 <- 1.24
x2 <- 1.37
x3 <- 1.56
T <- 0.3
o <- sign(w1*x1+w2*x2+w3*x3-T)
#method 2
w0 <- T
x0 <- -1
W <- c(w0,w1,w2,w3)
X <- c(x0,x1,x2,x3)
o <- sign(W%*%X)
#iris_newff
iris<-iris
iris$Species<-factor(iris$Species,levels = c("setosa","versicolor","virginica"),
? ? ? ? ? ? ? ? ? ? labels = c("1","2","3"))
iris$Species<-as.numeric(iris$Species)
#for (i in 1:5) {
# iris[,i] <- as.numeric(as.vector(iris)[,i])
#}
#normalize <- function(x) {
#? return ((x - min(x)) / (max(x) - min(x)))
#}
#iris_n <- as.data.frame(lapply(iris[,1:4], normalize))
#train_data<-iris[c(1:40,51:90,101:140),1:4]
#test_data<-iris[c(41:50,91:100,141:150),1:4]
#train_labels<-iris[c(1:40,51:90,101:140),5]
#test_labels<-iris[c(41:50,91:100,141:150),5]
#另一種選訓練測試樣本的方法
train_index <- c(sample(1:50,40),sample(51:100,40),sample(101:150,40))#產(chǎn)生訓練樣本的行標
train_data <- iris[train_index,1:4]
test_data <- iris[-train_index,1:4]
train_labels <- iris[train_index,5]
test_labels <- iris[-train_index,5]
library(AMORE)
net <- newff(n.neurons=c(4,8,2,1), learning.rate.global=1e-2, momentum.global=0.5,
? ? ? ? ? ? error.criterium="LMS", Stao=NA, hidden.layer="tansig",
? ? ? ? ? ? output.layer="purelin", method="ADAPTgdwm")
#隱藏層8伸但,2都是自己決定,主要注意4:iris一個數(shù)據(jù)有4個分量留搔,1:最后判斷種類更胖,一個數(shù)據(jù)只對應一種
result <- train(net, train_data, train_labels, error.criterium="LMS", report=TRUE,
? ? ? ? ? ? ? ? show.step=100, n.shows=5 )
y <- sim(result$net, test_data)
y[which(y<1.5)] <- 1
y[which(2<=y&y<3)] <- 2
y[which(y>=3)] <- 3
y<-as.numeric(y)
n=length(test_labels)
s<-0
for(i in 1:n){
? if(y[i]==test_labels[i]){
? ? s<-c(s+1)
? }
}
cat("正確率", (s/30)*100,"%")
setwd('//Users//wangxinran//Desktop//R語言')
wine178_n <- read.csv('wine178.csv')
wine178_n$class<-as.numeric(wine178_n$class)
table(wine178_n[,14])
normalize <- function(x){
? return((x-min(x))/(max(x)-min(x)))
}
wine178 <- as.data.frame(lapply(wine178_n[,-14],normalize))
train_index <- c(sample(1:59,50),sample(60:130,60),sample(130:178,40))#產(chǎn)生訓練樣本的行標
train_data <- wine178[train_index,1:13]
test_data <- wine178[-train_index,1:13]
train_labels <- wine178_n[train_index,14]
test_labels <- wine178_n[-train_index,14]
library(AMORE)
net <- newff(n.neurons=c(13,8,2,1), learning.rate.global=1e-2, momentum.global=0.5,
? ? ? ? ? ? error.criterium="LMS", Stao=NA, hidden.layer="tansig",
? ? ? ? ? ? output.layer="purelin", method="ADAPTgdwm")
result <- train(net, train_data, train_labels, error.criterium="LMS", report=TRUE,
? ? ? ? ? ? ? ? show.step=100, n.shows=5 )
y <- sim(result$net, test_data)
y[which(y<1.5)] <- 1
y[which(2<=y&y<3)] <- 2
y[which(y>=3)] <- 3
y<-as.numeric(y)
n=length(test_labels)
s<-0
for(i in 1:n){
? if(y[i]==test_labels[i]){
? ? s<-c(s+1)
? }
}
cat("正確率", (s/30)*100,"%")