分享

R语言学习笔记

 微笑如酒 2017-01-16

R语言学习笔记

2017-01-16 可木的专栏 免疫细胞研究bioworld
免疫细胞研究bioworld

antibody-king

专题导师群,海外精英群,技术专题群,药学系列群,医学系列群等 我们的服务对象:全球导师,硕博学生,海外精英,业内生物医药企业

欢迎加入文末的R语音学习交流群,加入方式,长按下文的二维码!


实践一:

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<> 

y<> #构造一个线性关系

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<> #一个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]<> #第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列大于0且第3列小于等于1的第1列元素

x[x[,2]>0|x[,1]<> #第2列大于0或者第1列小于3的第1列元素

x[!x[,2]<> #第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”查看



欢迎加入R语音学习交流群,加入方式

阅读
精选留言

该文章作者已设置需关注才可以留言

写留言

    该文章作者已设置需关注才可以留言

    写留言

    加载中
    以上留言由公众号筛选后显示

    了解留言功能详情

    微信扫一扫
    关注该公众号

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

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多