争子俱乐部 / R语言 / R Study Note 2

分享

   

R Study Note 2

2013-03-06  争子俱乐部

                   ########基本概念########

#####彻底清除#####
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法#

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>