R语言学习笔记
2013-04-23 13:41阅读:
实践一: x=1:100 #把1,2,。。。100个整数向量赋值到x
(x=1:100) #同上,只不过显示出来
sample(x,20) #从1,2,。。。,100中随机不放回地抽取20个值做样本
set.seed(0);sample(1:10,3)
#先设随机种子,再抽样
z=sample(1:20000,10000)
#从1到20000中不放回抽取10000个样本
z[1:10] #方括号中为向量z的下标
y=c(1,3,7,3,4,2)
z[y] #以y为下标的z的元素值
(z=sample(x,100,rep=T))
#从x中有放回地随机抽取100个值做样本
(z1=unique(z))
length(z1) #z1中不同的元素个数
xz=setdiff(x,z) # x和z之间的不同元素 ——
集合差
sort(union(xz),z)
#对xz以及z的并的元素从小到大排序
setequal(union(xz,z),x)
#xz以及z的并的元素与x是否一样
intersect(1:10,7:50) #两个
数据的交
sample(1:100,20,prob=1:100)
#从1:100中不等概率随机抽样,各个数字被抽到的概率与其值成比例
实践二:
pi*10^2 #
'*'(pi, '^'(10,2)) #
pi*(1:10)^-2.3 #可以对向量求指数幂
x=pi*10^2 #
x
print(x) #
(x=pi*10^2) #赋值带打印
pi^(1:5) #指数也可以是向量
print(x,digits=12)
#输出x的12位数字
实践三(关于R的对象类型等)
x=pi*10^2 #
class(x) #
x的class
typeof(x) #
x的type
class(cars) #
cars是R中自带的数据
typeof(cars)
#cars的type
names(cars) #
cars数据的变量名字
summary(cars) #
cars的汇总
head(class) #
cars的头几行数据,和cars[1:6,]相同
tail(class) #
cars的最后几行数据
str(cars) # 也是汇总
???
row.name(cars) #
行名字
attributes(cars)
#cars的一些信息
class(dist~speed) # 公式形式
,“~”的左边是因变量,右边是自变量
plot(dist~speed,cars) #
两个变量的散点图
plot(cars$speed,cars$dist) #
同上
实践四(包括简单自变量为定变量 及定性变量的回归)
ncol(cars),nrow(cars) #cars的行列数
dim(cars) #
cars的维数
lm(dist~speed, data =cars)
#一dist为因变量,speed为自变量做OLS,,,
cars$qspeed = cut(cars$speed,
breaks=quantile(cars$speed),include.lowest=TRUE)
#增加定性变量qspeed,四分点位为分割点
names(cars)
#数据cars多了一个变量
cars[3]
#第三个变量的值 ,和
cars[,3]类似
table(cars[3])
#列表
is.factor(car$speed)
#
plot(dist~speed,data=cars)
#点出箱线图
(a=lm(dist~speed, data=cars))
#拟合线性模型(简单最小二乘回归)
summary(a)
#回归结果(包括一些检验)
实践五(简单样本描述统计量)
x<-round(runif(20,0,20),digits=2)
#四舍五入
summary(x)
# 汇总
min(x),max(x) range(x)
# 极值 范围
median(x)
#中位数
mean(x)
#均值
var(x)
#方差
sd(x) #
标准差
sqrt(var(x))
#平方根
rank(x) #
秩(rank)
order(x)
# 升幂排列的x的下标
order(x,decreasing=T)
#降幂排列的x的下标
x[order(x)] #和sort(x)
相同
sort(x,decreasing=T) sort(x,dec=T)
#降幂排列的x
sum(x);length(x)
#元素和 以及向量的个数
round(x) 等同于round(x,0) 而round(x,5)
表示保留小数点后5位
fivenum(x),
#
五数汇总
quantile(x)
#分点位
quantiles(different
convention)
quantile(x,c(0,.33,.66,1))
#
mad(x)# 'median average distance':
cummax(x)
#累积最大值
cummin(x)
#累积最小值
sumprod(x)
#累积积
cor(x,sin(x/20))
#线性相关系数
(correlation)
实践六(简单图形)
x=rnorm(200) #200个随机正态数赋值到x
hist(x, col='light blue')
#直方图 histogram
rug(x)
#在直方图下面加上实际点的大小
stem(x) #
茎叶图
x<-rnorm(500)
#
y<-x+rnorm(500)
#构造一个线性关系
plot(y ~x)
#散点图
a=lm(y~x) #
做回归
abline(a,col='red')
# 加拟合线
同abline(lm(y~x),col='red')
print('Hello world!')
#打印
paste('x的最小值= ',min(x))
#
demo(graphics)
# 演示画图(点Enter切换)
实践七(复数运算和求函数极值)
(2+4i)^-3.5+(2i+4.5)*(-1.7-2.3i)/((2.6-7i)*(-4+5.1i))
#复数运算
(z<-complex(real=rnorm(10),imaginary=rnorm(10)))
#一个10维复向量,实部和虚部均为10个标准正态样本点
complex(re=rnorm(3),im=rnorm(3))
#3维复向量
Re(z) #
实部
Im(z) #
虚部
Mod(z) #
模
Arg(z) #
辐角
choose(3,2)
#组合
factorial(6)
#排列6!
#解方程:
f=function(x) x^3-2*x-1
uniroot(f,c(0,2)) #迭代求根
#如果知道根为极值
f=function(x) x^2+2*x+1
#定义一个二次函数
optimize(f,c(-2,2)) #在区间(-2,2) 求极值
实践八 (字符型向量)
a=factor(letter[1:10])
#letters:小写字母的向量,LETTERS:大写字母的向量
a[3]='w' #不行,警告!
a=as.character(a) #转换一下
a[3]='w' #可以了
a;character(a) #两种不同的类型
实践九 (数据输入输出)
x=scan() #
x=c( 1.5 , 2.6, 3.7,
2.1, 8.9, 12.0, -1.2,
-4.0)
#
w=read.table(file.choose(),header=T)
#从列表中选择有变量名的数据
setwd('f:/2013stat')
set('f:\2013stat')
#建立工作路径
(x=rnorm(20))
#给x赋值20个标准正态数据值
write(x,'f:/2013stat/test.txt')
#把数据写入文件
y=scan(x,'f:/2013stat/test.txt');y
#扫描文件数值数据到y
y=iris;y[1:5,];str(y)
#iris是R自带数据
write.table(y,'test.txt',row.name=F)
#把数据写入文本文件
w=read.table('f:/2013stat/test.txt',header=T)
#读带有变量名的数据
str(w)
#汇总
write.csv(y,'test.csv')
#把数据写入csv文件
v=read.csv('f:/2013stat/test.csv')
#读入csv数据文件
str(v) #汇总
data=read.table('clipboard')
#读入剪贴板的数据
实践十(序列)
(z=seq(-1,10,length=100)) # -1到10等间隔的100个数的序列
z=seq(-1,10,length=100)
#同上
(z=seq(10,-1,-0.1))
#10到-1间隔为-0.1的序列
(x=rep(1:3,3))
#三次重复1:3
(x=rep(3:5,1:3))
#
x=rep(c(1,10),c(4,5))
#
w=c(1,3,x,z)
#w[3]把数据(包括向量)组合成一个向量
x=rep(0,10);z=1:3;x+z
#向量加法,警告信息:
In x + z : 长的对象长度不是短的对象长度的整倍数
x*z #乘法
rev(x) #颠倒次序
z=c('no cat ','has','nine','tails')
#字符向量
z[1]=='no cat'
#逻辑等式
z=1:5 #
z[7]=8;z #
z=NULL #
z[c(1,3,5)]=1:3 #
z #
rnorm(10)[(2,5)] #
z[-c(1,3)] #去掉第1,3个元素
z=sample(1:100,10);z #
which(z==max(z)) #给出最大值的下标
实践十一 (矩阵)
x=sample(1:100,12);x #抽样
all(x>0);all(x!=0);any(x>0);(1:10)[x>0]
#逻辑符号的应用
diff(x) #差分
diff(x,lag=2) #差分
x=matrix(1:20,4,5);x #矩阵的构造
x=matrix(1:20,4,5,byrow=T);x
#矩阵的构造,按行排列
t(x) #矩阵转置
x=matrix(sample(1:100,20),4,5)
#
2*x #
x+5 #
y=matrix(sample(1:100,20),5,4)
#
x+t(y) #矩阵之间相加
(z=x%*%y) #矩阵相乘
z1=solve(z) #
solve(a,b)可以解ax=b方程
round(z1%*%z,14) #四舍五入
b=solve(z,1:4);b #解联立方程
实践十二 (矩阵继续)
nrow(x),ncol(x),dim(x) #行列数目
x=matrix(rnorm(24),4,6)
#
x[c(2,1),]
#第2和第1行
x[,c(1,3)]
#第1和第3列
x[2,1]
#第【2,1】元素
x[x[,1]>0,1]
#第1列大于0的元素
sum(x[,1]>0)
#第1列大于0的元素的个数
sum(x[,1]<=0)
#第1列不大于0的元素的个数
x[,-c(1,3)]
#没有第1和3列的x
diag(x)
#x的对角线元素
diag(1:5)
#以1:5为对角线,其它元素为0的对角线矩阵
diag(5)
#5维单位矩阵
x[-2,-c(1,3)]
#没有第2行、第1,3列的x
x[x[,1]>0&x[,3]<=1,1]
#第1列大于0且第3列小于等于1的第1列元素
x[x[,2]>0|x[,1]<3,1]
#第2列大于0或者第1列小于3的第1列元素
x[!x[,2]<3,1] #第1列中
相应于第2列中 >=3的元素
apply(x,1,mean)
#对行(第一维)求均值
apply(x,2,sum)
#对列(第二维)求和
x=matrix(rnorm(24),4,6)
#
x[lower.tri(x)]=0;x
#得到上三角阵
x[upper.tri(x)]=0
#得到下三角阵
实践十三 (高维数组)
x=array(runif(24),c(4,3,2))
#用24个服从均匀分布的样本点构造4乘3乘2的3维数组
is.matrix(x)
dim(x)
#得到维数
is.matrix(x[1,,])#部分三维数组是矩阵
x=array(1:24,c(4,3,2))
x[c(1,3),,]
#
apply(x,1,mean)
#可以对部分维做求均值运算
apply(x,1:2,sum)
#可以对部分维数做求和运算
apply(x,c(1,3),prob)
#对部分维数求乘积
实践十四 (矩阵与向量之间的运算)
x=matrix(1:20,5,4) #5乘4矩阵
sweep(x,1,1:5,'*')
#把向量1:5的每个元素乘到每一行
sweep(x,2,1:4,'+')
#把向量1:4的每个元素加到每一列
x*1:5
#把向量1:5的每个元素乘到每一行
(x=matrix(sample(1:100,24),6,4));(x1=scale(x)) #
(x2=scale(x,scale=F))
#
(x3=scale(x,center=F))
#
round(apply(x1,2,mean),14)
#
apply(x1,2,sd)
#
round(apply(x2,2,mean),14);apply(x2,2,sd)
#
round(apply(x3,2,mean),14);apply(x3,2,sd)
#
实践十六 (缺失值、数据的合并)
airquality #有缺失值(NA)的R自带数据
complete.cases(airquality)
#判断每行有没有缺失值
which(complete.cases(airquality)==F)
#有缺失值的行号
sum(complete.cases(airquality))
#完整观测值的行数
na.omit(airquality)
#删去缺失值的数据
#附加,横或竖合并数据:append,cbind,rbind
x=1:10;x[12]=3
#
(x1=append(x,77,after=5))
#在第5项后面添加 77
cbind(1:5,rnorm(5))
#
rbind(1:5,rnorm(5))
#
cbind(1:3,4:6);rbind(1:3,4:6)
#
#去掉矩阵重复的行
(x=rbind(1:5,runif(5),1:5,7:11))
#
x[!duplicated(x),]
#
unique(x)
#
实践十六(list)
z=list(1:3,Tom=c(1:2,a=list('R',LETTERS[1:5]),W='hi'))
z[[1]];z[[2]]
z$T
z$T$a2
z$T[[3]]
z$T$w
实践十七 (条形图和表)
x=scan()
3 3 3 4 1 4 2 1 3 2 5 3 1 2 5 2 3 4 2 2 5 3 1 4 2 2
4 3 5 2
barplot(x)
table(x)
barplot(table(x))
barplot(table(x)/length(x))
table(x)/length(x)
实践十八(形成表格)
library(MASS) #载入软件包MASS
quine
#MASS所带数据
attach(quine)
#把数据变量的名字放入内存
#下面是从该数据得到的各种表格
table(Age)
#
table(Sex,Age);
#
tab=xtabs(~Sex+Age,quine);
#
unclass(tab)
#
tapply(Days,Age,mean)
#
tapply(Days,list(Sex,Age),mean)
#
detach(quine)
#attach的逆运行
实践十九(如何写函数)
ss=function(n=100){
z=2;
for(i in 2:n)
if(any(i%%2:(i-1)==0)==F)
z=c(z,i);
return(z)
}#求n以内的素数
fix(ss) #用来修改任何函数或者编写一个新函数
ss() #计算100以内的素数
t1=Sys.time() #纪录系统时间点
ss(10000) #计算10000以内的素数
Sys.time()-t1 #费了多少时间
system.time(ss(10000))
#计算执行ss(10000)所用时间
#函数可以不写return,这时最后一个值为return的值
#为了输出多个值最好使用list输出
实践二十(画图)
x=seq(-3,3,len=20);
y=dnorm(x)#产生数据
w=data.frame(x,y) #合并x和y,生成w
par(mfcol=c(2,2)) #准备画4个图的地方
plot(y~x,w,main='正态密度函数')
plot(y~x,w,type='l',main='正态密度函数')
plot(y~x,w,type='o',main='正态密度函数')
plot(y~x,w,type='b',main='正态密度函数')
par(mfcol=c(1,1))#取消par(mfcol=c(2,2))
实践二十一(色彩和符号等调节)
plot(1,1,xlim=c(1,7.5),ylim=c(0,5),type='n')#画出框架
#在plot命令后面追加点(如要追加线可用lines函数)
points(1:7,rep(4.5,7),cex=seq(1,4,l=7),col=1:7,pch=0.6)
text(1:7,rep(3.5,7),labels=paste(0:6,letters[1:7]),cex=seq(1,4,l=7),col=1:7)
#在指定位置加文字
points(1:7,rep(2,7),pch=(0:6)+7)#点出符号7到13
text((1:7)+0.25,rep(2:7),paste((0:6)+7))
#加符号号码
points(1:7,rep(1:7),pch=(0:6)+14)
#点出符号14到20
text((1:7)+0.25,rep(1:7),paste((0:6)+14))#加符号号码
这些关于符号形状,大小,颜色,以及其它画图选项的说明可用 “?par”查看