lym

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,"%")

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市催式,隨后出現(xiàn)的幾起案子函喉,更是在濱河造成了極大的恐慌,老刑警劉巖荣月,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件管呵,死亡現(xiàn)場離奇詭異,居然都是意外死亡哺窄,警方通過查閱死者的電腦和手機捐下,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萌业,“玉大人坷襟,你說我怎么就攤上這事∩辏” “怎么了婴程?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抱婉。 經(jīng)常有香客問我档叔,道長,這世上最難降的妖魔是什么蒸绩? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任衙四,我火速辦了婚禮,結(jié)果婚禮上患亿,老公的妹妹穿的比我還像新娘传蹈。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布惦界。 她就那樣靜靜地躺著挑格,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沾歪。 梳的紋絲不亂的頭發(fā)上恕齐,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音瞬逊,去河邊找鬼。 笑死仪或,一個胖子當著我的面吹牛确镊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播范删,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼蕾域,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了到旦?” 一聲冷哼從身側(cè)響起旨巷,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎添忘,沒想到半個月后采呐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡搁骑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年斧吐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仲器。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡煤率,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乏冀,到底是詐尸還是另有隱情蝶糯,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布辆沦,位于F島的核電站昼捍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏众辨。R本人自食惡果不足惜端三,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鹃彻。 院中可真熱鬧郊闯,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至欢摄,卻和暖如春庸疾,著一層夾襖步出監(jiān)牢的瞬間牵敷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留渠概,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓苗膝,卻偏偏與公主長得像止毕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吞滞,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容