########基本概念########
#####彻底清除#####
rm(list=ls())
#####读取文件#####
wd=getwd();wd #获取当前路径#
setwd(dir="E:/Study/R");wd #设置当前路径#
rt<-read.table("E:/Study/R/Ch02/exam0203.txt",head=TRUE);rt #读取文件
#####简单运算#####
x<-c(-1,0,2);y<-c(3,8,2)
v<-2*x+y+1;v
x*y
x/y
x^2
y^x
exp(x)
sqrt(y);sqrt(-2+0i) #开方
m<-round(x/3,1);n<-y/5
m;n
m%/%n #整数除法
m%%n #求余数
x<-c(10,6,4,7,8)
min(x);which.min(x) #第几个分量是最小值
max(x);which.max(x)
sum(x);prod(x) #求和;求积
var<-sum((x-mean(x))^2)/(length(x)-1);var
var(x) #求向量方差
#####规律序列#####
seq(-5,5,by=.5)
seq(length=21,-5,by=.5)
seq(-5,5, length.out=21) #等间隔函数
x<-c(1,4,6,25)
s<-rep(x,times=3);s #重复函数
#####逻辑向量#####
all(c(1,6,4)>3)
any(c(1,6,4)>3)
#####缺失数据#####
z<-c(1:3,NA)
ind<-is.na(z);ind #检验是否有缺失数据
z[is.na(z)]<-0;z #将缺失数据改为0
z<-c(0/1,0/0,1/0,NA);z
is.nan(z) #是否确定
is.finite(z) #是够无穷
is.na(z) #是否缺失
#####字符向量#####
paste("Fuck","You!")
labs<-paste("X",1:5,seq="");labs
paste(1:10)
paste("Time is",date())
paste(c("a","b"),collapse=".")
#####复数向量#####
x<-seq(-pi,pi,by=pi/10)
y<-sin(x)
z<-complex(re=x,im=y) #生成复数向量,x为实部,y为虚部
plot(z)
lines(z)
#####向量下标#####
x<-c(1,3,5);c(x+1)[3]
x[2]<-13;x
x[c(1,3)]<-c(12,14);x
x[x<13]
z<-c(-1,1:3,NA)
y<-z[!is.na(z)];y #将非缺失值赋予另一向量
x<-(z+1)[(!is.na(z)&z>0)];x #做相应运算
y<-numeric(length(x))
y[x<0]<-1-x[x<0]
y[x>0]<-1+x[x>0] #定义函数
c("a","b","c")[rep(c(2,1,3),times=3)] #下标正整数运算
ages<-c(Li=34,Liu=22,Ji=15);ages["Ji"] #访问元素
friut<-c(12,14,15,13)
names(friut)<-c("Ji","Ya","Jb","Yooo")
friut #在向量元素后加名字 命名
#####模式属性#####
mode(c(1,2,3)>5) #类型
length(2:10) #长度
m<-as.character(c(2:9));m #转化类型
n<-as.numeric(m);n #转化类型
x<-numeric();x[5]<-12;x #修改长度
x<-c(Girl=800,Woman=400);x
attributes(x) #返回对象属性
attr(x,"names") #存取对象属性
attr(x,"names")<-c("Luoli","Shufu");x
attr(x,"sex")<-"Female";attributes(x) #修改对象属性
#####变量属性#####
sex<-c("M","F","F","?","M");sex
sexf<-factor(sex);sexf #factor()把向量转换成因子
sex.levels<-levels(sexf);sex.levels
sex.tab<-table(sex);sex.tab #统计频数
height<-c(154,154,165,173,143)
tapply(height,sex,mean) #tapply()
gl(3,5)
gl(3,1,15) #gl(水平数,重复次数,结果长度)
#####多维数组和矩阵#####
z<-c(1:15);z
dim(z)<-c(5,3);z #向量定义成数组
x<-array(1:15,c(5,3));x #直接构造数组
y<-matrix(c(1:15),nrow=5,ncol=3,byrow=TRUE);y #直接构造数组
y<-matrix(c(1:15),nrow=5,ncol=3);y #直接构造数组
a<-1:24
dim(a)<-c(2,3,4)
a[2,1,3]
a[1,,]
a[1,2:3,2:3] #数组下表
#####数组运算#####
A<-matrix(1:6,nrow=2,byrow=T);A
B<-matrix(1:6,nrow=2);B
D1<-A/B;D1
D2<-A+B;D2
x1<-c(100,200);x1
x2<-1:6;x2
x3<-matrix(1:6,nrow=3);x3
x1+x2
x1+x3 #形状不一致数组运算
#####矩阵运算#####
A<-matrix(1:6,nrow=2);A
t(A) #转置
det(array(1:4,c(2,2))) #求行列式
m<-1:5;n<-2*1:5;m%*%n #向量内积
m%o%n #向量外积
outer(m,n) #向量外积
A*A
A%*%t(A) #矩阵相乘
diag(c(1,5,9)) #生成对角矩阵
diag(matrix(1:9,nrow=3)) #取对角线元素
A<-diag(c(5,2,1));A
b<-c(2,5,3);b
solve(A,b) #解线性方程组
solve(A) #求矩阵逆
ev<-eigen(A);ev #求解特征值与特征向量
x1<-rbind(c(1,2),c(3,4));x1 #矩阵合并
x2<-10+x1;x2
x3<-cbind(x1,x2);x3
x4<-cbind(1,x1);x4
A<-matrix(1:6,nrow=3);A #矩阵拉直
as.vector(A)
X<-matrix(1:6,nrow=3, #命名数组维
dimnames=list(c("one","two","three"),c("1st","2nd")),
byrow=F);X
#####语句#####
#if/else语句#
x<-c(-1,-5,0,4)
if(any(x<=0)) {y <- x
y[which(x<=0)]<-y[which(x<=0)]+1} else y <- x #??????
x;y
y<-if(any(x<=0))(x+1)else(x)
x;y
#switch语句#
x<-3
switch(x,2+2,mean(1:10),norm(4)) #???????
#if语句#
n<-4;x<-array(0,dim=c(n,n)) #构造Hilbert矩阵#
for(i in 1:n){
for(j in 1:n){
x[i,j]<-1/(i+j-1)
}
}
x
round(x,2)
#while语句#
f<-1;f[2]<-1;i<-1 #构造100以内Fibonacci矩阵#
while (f[i]+f[i+1]<100){
f[i+2]<-f[i]+f[i+1]
i<-i+1
}
f
#repeat语句#
f<-1;f[2]<-1;i<-1
repeat{
f[i+2]<-f[i]+f[i+1]
i<-i+1
if (f[i]+f[i+1] >=100) break
}
f
#####函数#####
#二分法计算#
fzero<-function(f,a,b,eps=1e-5){
if(f(a)*f(b)>0){
list(fail="finding root is fail")
}
else{
repeat{
if(abs(a-b)<eps) break
x<-(a+b)/2
if(f(a)*f(x)<0) b<-x else a<-x
}
list(root=(a+b)/2,fun=f(x))
}
}
f<-function(x) x^3-x-1
fzero(f,1,2,1e-6)
uniroot(f,c(1,2)) #一元方程根
#计算两样本T统计量#
A <- c(79.98, 80.04, 80.02, 80.04, 80.03, 80.03,
80.04, 79.97, 80.05, 80.03, 80.02, 80.00, 80.02)
B <- c(80.02, 79.94, 79.98, 79.97, 79.97, 80.03,
79.95, 79.97)
twosam<-function(y1,y2){
n1<-length(y1);n2<-length(y2)
ym1<-mean(y1);ym2<-mean(y2)
s1<-var(y1);s2<-var(y2)
s<-((n1-1)*s1+(n2-1)*s2)/(n1+n2-2)
(ym1-ym2)/sqrt(s*(1/n1+1/n2))
}
twosam(A,B)
#非线性方程组Newton法#