R语言基础练习与入门实践

举报
DrugAI 发表于 2021/07/15 05:29:40 2021/07/15
【摘要】   练习: 熟练使用R软件 实践1:最初几步 x=1:100#把1,2,...,100个整数向量赋值到x(x=1:100) #同上, 只不过显示出来sample(x,20) #从1,...,100中随机不放回地抽取20个值作为样本set.seed(0);sample(1:10,3)#先设随机种子再抽样.#从1,...,200000中随机不放回地抽取10000个...

 

练习: 熟练使用R软件

实践1:最初几步


  
  1. x=1:100#把1,2,...,100个整数向量赋值到x
  2. (x=1:100) #同上, 只不过显示出来
  3. sample(x,20) #从1,...,100中随机不放回地抽取20个值作为样本
  4. set.seed(0);sample(1:10,3)#先设随机种子再抽样.
  5. #从1,...,200000中随机不放回地抽取10000个值作为样本:
  6. z=sample(1:200000,10000)
  7. z[1:10]#方括号中为向量z的下标
  8. y=c(1,3,7,3,4,2)
  9. z[y]#以y为下标的z的元素值
  10. (z=sample(x,100,rep=T))#从x放回地抽取100个随机样本
  11. (z1=unique(z))
  12. length(z1)#z中不同的元素个数
  13. xz=setdiff(x,z) #x和z之间的不同元素--集合差
  14. sort(union(xz,z))#对xz及z的并的元素从小到大排序
  15. setequal(union(xz,z),x) #对xz及z的并的元素与x是否一样
  16. intersect(1:10,7:50) #两个数据的交
  17. sample(1:100,20,prob=1:100)#从1:100中不等概率随机抽样,
  18. #各数目抽到的概率与1:100成比例

实践2: 一些简单运算


  
  1. pi *10^2 #能够用?”*”来看基本算术运算方法, pi是圆周率
  2. "*"(pi, "^"(10,2)) #和上面一样, 有些繁琐, 是吧! 没有人这么用
  3. pi * (1:10)^-2.3#可以对向量求指数幂
  4. x = pi * 10^2
  5. x
  6. print(x) #和上面一样
  7. (x=pi *10^2) #赋值带打印
  8. pi^(1:5) #指数也可以是向量
  9. print(x, digits = 12)#输出x的12位数字

实践3:关于R对象的类型等


  
  1. 这里写代码片x=pi*10^2
  2. class(x) #x的class
  3. typeof(x) #x的type
  4. class(cars)#cars是一个R中自带的数据
  5. typeof(cars) #cars的type
  6. names(cars)#cars数据的变量名字
  7. summary(cars) #cars的汇总
  8. head(cars)#cars的头几行数据, 和cars[1:6,]相同
  9. tail(cars) #cars的最后几行数据
  10. str(cars)#也是汇总
  11. row.names(cars) #行名字
  12. attributes(cars)#cars的一些信息
  13. class(dist~speed)#公式形式,"~"左边是因变量,右边是自变量
  14. plot(dist ~speed,cars)#两个变量的散点图
  15. plot(cars$speed,cars$dist) #同上

实践4: 包括简单自变量为定量变量及定性变量的回归


  
  1. ncol(cars);nrow(cars) #cars的行列数
  2. dim(cars) #cars的维数
  3. lm(dist ~ speed, data = cars)#以dist为因变量,speed为自变量做OLS
  4. cars$qspeed =cut(cars$speed, breaks=quantile(cars$speed),
  5. include.lowest = TRUE) #增加定性变量qspeed, 四分位点为分割点
  6. names(cars) #数据cars多了一个变量
  7. cars[3]#第三个变量的值和cars[,3]类似
  8. table(cars[3])#列表
  9. is.factor(cars$qspeed)
  10. plot(dist ~ qspeed, data = cars)#点出箱线图
  11. (a=lm(dist ~ qspeed, data = cars))#拟合线性模型(简单最小二乘回归)
  12. summary(a)#回归结果(包括一些检验)

实践5: 简单样本描述统计量等等


  
  1. 这里写代码片x <- round(runif(20,0,20), digits=2)#四舍五入
  2. summary(x) #汇总
  3. min(x);max(x) #极值, 与range(x)类似
  4. median(x) # 中位数(median)
  5. mean(x) # 均值(mean)
  6. var(x) #方差(variance)
  7. sd(x) # 标准差(standard deviation),为方差的平方根
  8. sqrt(var(x)) #平方根
  9. rank(x) # 秩(rank)
  10. order(x)#升幂排列的x的下标
  11. order(x,decreasing = T)#降幂排列的x的下标
  12. x[order(x)] #和sort(x)相同
  13. sort(x) #同上: 升幂排列的x
  14. sort(x,decreasing=T)#sort(x,dec=T) 降幂排列的x
  15. sum(x);length(x)#元素和及向量元素个数
  16. round(x) #四舍五入,等于round(x,0),而round(x,5)为留到小数点后5位
  17. fivenum(x) # 五数汇总, quantiles
  18. quantile(x) # 分位点 quantiles (different convention)有多种定义
  19. quantile(x, c(0,.33,.66,1))
  20. mad(x) # "median average distance":
  21. cummax(x)#累积最大值
  22. cummin(x)#累积最小值
  23. cumprod(x)#累积积
  24. cor(x,sin(x/20)) #线性相关系数 (correlation)

实践6:简单图形


  
  1. x=rnorm(200)#200个随机正态数赋值到x
  2. hist(x, col = "light blue")#直方图(histogram)
  3. rug(x) #在直方图下面加上实际点的大小
  4. stem(x)#茎叶图
  5. x <- rnorm(500)
  6. y <- x + rnorm(500) #构造一个线性关系
  7. plot(y~ x) #散点图
  8. a=lm(y~x) #做回归
  9. abline(a,col="red")#或者abline(lm(y~x),col="red")散点图加拟合线
  10. print("Hello World!")
  11. paste("x 的最小值= ", min(x)) #打印
  12. demo(graphics)#演示画图(点Enter来切换)

 

 

实践7: 复数运算和求函数极值


  
  1. #(2+4i)^-3.5+(2i+4.5)*(-1.7-2.3i)/((2.6-7i)*(-4+5.1i))#复数运算
  2. #下面构造一个10维复向量, 实部和虚部均为10个标准状态样本点:
  3. (z <-complex(real=rnorm(10), imaginary =rnorm(10)))
  4. complex(re=rnorm(3),im=rnorm(3))#3维复向量
  5. Re(z) #实部
  6. Im(z) #虚部
  7. Mod(z) #模
  8. Arg(z) #辐角
  9. choose(3,2) #组合
  10. factorial(6)#排列6!
  11. #解方程:
  12. f=function(x) x^3-2*x-1
  13. uniroot(f,c(0,2))#迭代求根
  14. #如果知道根为极值
  15. f=function(x) x^2+2*x+1 #定义一个二次函数
  16. optimize(f,c(-2,2))#在区间(-2,2)间求极值

实践8:字符型向量


  
  1. a=factor(letters[1:10])#letters:小写字母的向量,LETTERS:大写字母
  2. a[3]="w" #不行! 会给出警告
  3. a=as.character(a) #转换一下
  4. a[3]="w" #可以了
  5. a;factor(a) #两种不同的类型

实践9:数据输入输出


  
  1. x=scan()#从屏幕输入数据, 可以键入, 也可以粘贴,可多行输入,空行后Enter
  2. 1.5 2.6 3.7 2.1 8.9 12 -1.2 -4
  3. x=c(1.5,2.6,3.7,2.1,8.9,12,-1.2,-4)#等价于上面
  4. w=read.table(file.choose(),header=T)#从列表中选择有变量名的数据
  5. setwd(“f:/2010stat”)#或setwd("f:\2010stat")#建立工作路径
  6. (x=rnorm(20)) #给x赋值20个标准正态数据值
  7. #(注:有常见分布的随机数, 分布函数,密度函数及分位数函数)
  8. write(x,"f:/2010stat/test.txt")#把数据写入文件(路径要对)
  9. y=scan("f:/2010stat/test.txt");y #扫描文件数值数据到y
  10. y=iris;y[1:5,];str(y) #iris是R自带数据
  11. write.table(y,"test.txt",row.names=F)#把数据写入文本文件
  12. w=read.table("f:/2010stat/test.txt",header=T)#读带有变量名的数据
  13. str(w) #汇总
  14. write.csv(y,"test.csv")#把数据写入csv文件
  15. v=read.csv("f:/2010stat/test.csv")#读入csv数据文件
  16. str(v) #汇总
  17. data=read.table("clipboard")#读入剪贴板的数据

实践10:序列等等


  
  1. (z=seq(-1,10,length=100))#-1到10等间隔的100个数的序列
  2. z=seq(-1,10,len=100)#和上面等价写法
  3. (z=seq(10,-1,-0.1)) #10到-1间隔为-0.1的序列
  4. (x=rep(1:3,3)) #三次重复1:3
  5. (x=rep(3:5,1:3)) #自己看, 这又是什么呢?
  6. x=rep(c(1,10),c(4,5))
  7. w=c(1,3,x,z);w[3]#把数据(包括向量)组合(combine)成一个向量
  8. x=rep(0,10);z=1:3;x+z #向量加法(如果长度不同, R如何给出警告和结果?)
  9. x*z #向量乘法
  10. rev(x)#颠倒次序
  11. z=c("no cat","has ","nine","tails") #字符向量
  12. z[1]=="no cat" #双等号为逻辑等式
  13. z=1:5
  14. z[7]=8;z #什么结果? 注:NA为缺失值(not available)
  15. z=NULL
  16. z[c(1,3,5)]=1:3;
  17. z
  18. rnorm(10)[c(2,5)]
  19. z[-c(1,3)]#去掉第1、3元素
  20. z=sample(1:100,10);z
  21. which(z==max(z))#给出最大值的下标

实践11: 矩阵


  
  1. x=sample(1:100,12);x #抽样
  2. all(x>0);all(x!=0);any(x>0);(1:10)[x>0]#逻辑符号的应用
  3. diff(x) #差分
  4. diff(x,lag=2) #差分
  5. x=matrix(1:20,4,5);x #矩阵的构造
  6. x=matrix(1:20,4,5,byrow=T);x#矩阵的构造, 按行排列
  7. t(x) #矩阵转置
  8. x=matrix(sample(1:100,20),4,5)
  9. 2*x
  10. x+5
  11. y=matrix(sample(1:100,20),5,4)
  12. x+t(y) #矩阵之间相加
  13. (z=x%*%y) #矩阵乘法
  14. z1=solve(z) # solve(a,b)可以解ax=b方程
  15. z1%*%z #应该是单位向量, 但浮点运算不可能得到干净的0
  16. round(z1%*%z,14) #四舍五入
  17. b=solve(z,1:4); b #解联立方程
  18. #\end{verbatim}}

实践12:矩阵继续


  
  1. nrow(x);ncol(x);dim(x)#行列数目
  2. x=matrix(rnorm(24),4,6)
  3. x[c(2,1),]#第2和第1
  4. x[,c(1,3)] #第1和第3
  5. x[2,1] #第[2,1]元素
  6. x[x[,1]>0,1] #第1列大于0的元素
  7. sum(x[,1]>0) #第1列大于0的元素的个数
  8. sum(x[,1]<=0) #第1列不大于0的元素的个数
  9. x[,-c(1,3)]#没有第13列的x.
  10. diag(x) #x的对角线元素
  11. diag(1:5) #以1:5为对角线,其它元素为0的对角线矩阵
  12. diag(5) #5维单位矩阵
  13. x[-2,-c(1,3)]#没有第2行、第13列的x
  14. x[x[,1]>0&x[,3]<=1,1]#第1列>0并且第3列<=1的第1列元素
  15. x[x[,2]>0|x[,1]<.51,1]#第1列<.51或者第2列>0的第1列元素
  16. x[!x[,2]<.51,1]#第1列中相应于第2列中>=.51的元素
  17. apply(x,1,mean)#对行(第一维)求均值
  18. apply(x,2,sum)#对列(第二维)求和
  19. x=matrix(rnorm(24),4,6)
  20. x[lower.tri(x)]=0;x #得到上三角阵,
  21. #为得到下三角阵, 用x[upper.tri(x)]=0)

实践13:高维数组


  
  1. x=array(runif(24),c(4,3,2))
  2. x#从24个均匀分布的样本点构造432的三维数组
  3. is.matrix(x)
  4. dim(x)#得到维数(4,3,2)
  5. is.matrix(x[1,,])#部分三维数组是矩阵
  6. x=array(1:24,c(4,3,2))
  7. x[c(1,3),,]
  8. x=array(1:24,c(4,3,2))
  9. apply(x,1,mean) #可以对部分维做运算
  10. apply(x,1:2,sum) #可以对部分维做运算
  11. apply(x,c(1,3),prod) #也以对部分维做运算

实践14:矩阵与向量之间的运算


  
  1. x=matrix(1:20,5,4) #5乘4矩阵
  2. sweep(x,1,1:5,"*")#把向量1:5的每个元素乘到每一行
  3. sweep(x,2,1:4,"+")#把向量1:4的每个元素加到每一列
  4. x*1:5
  5. sweep(x,2,1:4,"+")#标准化,即每一元素减去该列均值,除以该列标准差:
  6. (x=matrix(sample(1:100,24),6,4));(x1=scale(x))
  7. (x2=scale(x,scale=F))#自己观察并总结结果
  8. (x3=scale(x,center=F)) #自己观察并总结结果
  9. round(apply(x1,2,mean),14) #自己观察并总结结果
  10. apply(x1,2,sd)#自己观察并总结结果
  11. round(apply(x2,2,mean),14);apply(x2,2,sd)#自己观察并总结结果
  12. round(apply(x3,2,mean),14);apply(x3,2,sd)#自己观察并总结结果

实践15:缺失值, 数据的合并


  
  1. airquality #有缺失值(NA)的R自带数据
  2. complete.cases(airquality)#没有缺失值的那些行中那些是缺失的
  3. which(complete.cases(airquality)==F) #没有缺失值的行号
  4. sum(complete.cases(airquality)) #完整观测值的个数
  5. na.omit(airquality) #删去缺失值的数据
  6. #附加, 横或竖合并数据: append,cbind,rbind
  7. x=1:10;x[12]=3
  8. (x1=append(x,77,after=5))
  9. cbind(1:5,rnorm(5))
  10. rbind(1:5,rnorm(5))
  11. cbind(1:3,4:6);rbind(1:3,4:6) #去掉矩阵重复的行
  12. (x=rbind(1:5,runif(5),runif(5),1:5,7:11))
  13. x[!duplicated(x),]
  14. unique(x)

实践16: list


  
  1. #list可以是任何对象(包括list本身)的集合
  2. z=list(1:3,Tom=c(1:2,a=list("R",letters[1:5]),w="hi!"))
  3. z[[1]];z[[2]]
  4. z$T
  5. z$T$a2
  6. z$T[[3]]
  7. z$T$w

实践17:条形图和表


  
  1. x =scan()#30个顾客在五个品牌中的挑选
  2. 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
  3. barplot(x) #错误的图
  4. table(x) #制表
  5. barplot(table(x)) #正确的图
  6. barplot(table(x)/length(x)) #比例图(和上图形状一样)
  7. table(x)/length(x)
  8. #\end{verbatim}}

实践18: 形成表格


  
  1. library(MASS)#载入软件包MASS
  2. quine #MASS所带数据
  3. attach(quine)#把数据变量的名字放入内存
  4. #下面是从该数据得到的各种表格
  5. table(Age)
  6. table(Sex, Age); tab=xtabs(~ Sex + Age, quine); unclass(tab)
  7. tapply(Days, Age, mean)
  8. tapply(Days, list(Sex, Age), mean)
  9. detach(quine) #attach的逆运行

 

实践19: 如何写函数


  
  1. ss=function(n=100){z=2;
  2. for (i in 2:n)if(any(i%%2:(i-1)==0)==F)z=c(z,i);return(z) }
  3. #fix(ss) #用来修改任何函数或编写一个新函数
  4. ss() #计算100以内的素数
  5. t1=Sys.time() #记录时间点
  6. ss(10000) #计算10000以内的素数
  7. Sys.time()-t1 #费了多少时间
  8. system.time(ss(10000))#计算执行ss(10000)所用时间
  9. #函数可以不写return,这时最后一个值为return的值.
  10. #为了输出多个值最好使用list输出

 

实践20: 画图


  
  1. x=seq(-3,3,len=20);y=dnorm(x)#产生数据
  2. w= data.frame(x,y)#合并x,成为数据w
  3. par(mfcol=c(2,2))#准备画四个图的地方
  4. plot(y ~ x, w,main="正态密度函数")
  5. plot(y ~ x,w,type="l", main="正态密度函数")
  6. plot(y ~ x,w,type="o", main="正态密度函数")
  7. plot(y ~ x,w,type="b",main="正态密度函数")
  8. par(mfcol=c(1,1))#取消par(mfcol=c(2,2))

实践21: 色彩和符号等调节


  
  1. plot(1,1,xlim=c(1,7.5),ylim=c(0,5),type="n") #画出框架
  2. #在plot命令后面追加点(如要追加线可用lines函数):
  3. points(1:7,rep(4.5,7),cex=seq(1,4,l=7),col=1:7, pch=0:6)
  4. text(1:7,rep(3.5,7),labels=paste(0:6,letters[1:7]),cex=seq(1,4,l=7),
  5. col=1:7)#在指定位置加文字
  6. points(1:7,rep(2,7), pch=(0:6)+7)#点出符号713
  7. text((1:7)+0.25, rep(2,7), paste((0:6)+7))#加符号号码
  8. points(1:7,rep(1,7), pch=(0:6)+14) #点出符号1420
  9. text((1:7)+0.25, rep(1,7), paste((0:6)+14)) #加符号号码
  10. #这些关于符号形状, 大小, 颜色以及其它画图选项的说明可用"?par"来查看

 

文章来源: drugai.blog.csdn.net,作者:DrugAI,版权归原作者所有,如需转载,请联系作者。

原文链接:drugai.blog.csdn.net/article/details/86512945

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。