1 / 41

第二章 S-Plus 基础

第二章 S-Plus 基础. 本章要求. 熟悉在 S-Plus 命令行中 S-Plus 基本数据处理 熟悉在 S-Plus 命令行中进行基本数据基本运算 编写简单的计算函数 绘制基本图形. 第一节 S-Plus 环境. S-Plus 用户界面 算术运算. S-Plus. S 语言和 S 的扩展 S-Plus ,是由 AT&T Bell 实验室于 20 世纪 70 年代末 ~80 年代初研制开发的,其中 Rick Becker 和 John Chambers 是主要创始人之一。. S-Plus 的主要应用特点:.

Download Presentation

第二章 S-Plus 基础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第二章 S-Plus基础

  2. 本章要求 • 熟悉在S-Plus命令行中S-Plus基本数据处理 • 熟悉在S-Plus命令行中进行基本数据基本运算 • 编写简单的计算函数 • 绘制基本图形

  3. 第一节 S-Plus环境 • S-Plus用户界面 • 算术运算

  4. S-Plus S语言和S的扩展S-Plus,是由AT&T Bell实验室于20世纪70年代末~80年代初研制开发的,其中Rick Becker和John Chambers是主要创始人之一。

  5. S-Plus的主要应用特点: • S-Plus拥有强大的面向对象的开发环境。 • 作为标准的统计语言,S拥有几乎所有,在S-Plus中,用户可以随处自定义的各种函数,延伸基本的分析方法。 • 作为面向对象的语言,S集数据的定义、插入、修改和函数计算等功能于一体,语言风格统一,可以独立完成数据分析生命周期的全部活动。 • S-Plus提供了非常丰富的2D和3D图形库。 • 与S-Plus类似的有新近开发的R,R最早由Auckland 大学统计系的Robert Gentleman和Ross Ihaka于1995年开始研制开发,从1997年开始免费公开发布。R在计算功能上比S-Plus有更高的效率,但由于推出时间较短,因而不如S-Plus普及。S-Plus和R二者在语法和功能实现上区别不大,因而学习S-Plus的用户可以轻松转到R,反之亦然。

  6. S-Plus界面六项内容: • Object Explorer(对象浏览器); • Commands Window(命令窗口) ; • Graph Sheets(图形操作表) ; • Script Window(草稿窗口); • Menus(菜单); • Toolbars(工具栏)。

  7. 第二节 向量的基本操作 一、向量的定义和表示 二、向量的基本操作 二、向量的算术运算 三、向量的逻辑运算

  8. 一、向量的定义 一、算术运算:S-Plus默认的命令提示符是“>” 1) 计算7 X 3,可如下执行命令: > 7*3 > 21 2) 计算 (7+2) X 3,可如下执行命令: > (7+2)*3 > 42 3) 计算 \log2(12 /3),可如下执行命令: > log(12/3,2) > 2 4) 计算幂2 X 32,可如下执行命令: > 2*(3^2) > 18

  9. 一、 向量的定义 二、赋值: > x<-3 > y_1+x 屏幕打印变量如下,x: > x > 3 > print(x*y) > 12

  10. 二、向量的基本操作 1、连接命令; 2、序列命令seq; 3、循环命令rep;

  11. 1、连接命令 例1:> A.brand<-c(15,27,89) #生成数值类型的向量 > A.brand*0.8 [1] 12.0 21.6 71.2 > title.text<-c(“This”,“is”,“for”,“sale”)#生成非数值类型的向量 1.向量a中第i位置元素表示: > A.brand[1] [1] 15 > A.brand[length(A.brand)] [1] 89 如果输入的位置超出向量的长度,则S-Plus输出NA,NA表示数据缺失,如下所示: > A.brand[6] [1] NA

  12. 1、连接命令(续) 2.在向量中插入新的数据: 在A.brand向量末尾添加两个新产品价格的书写方法是: 例1续: > add.A.brand<-c(A.brand,189,240) > add.A.brand [1]15 27 89 189 240 在向量的开头插入新数据的书写方法如下: > addbegin.A.brand<-c(12,13,A.brand) [1] 12 13 15 27 89 思考题1 : 如何在向量的第i个位置后插入数据?

  13. 1、连接命令(续) 3.向量与向量的合并: • B.brand<-c(35,40,58) • AB.brand<-c(A.brand,B.brand) [1] 15 27 89 35 46 58 向量中元素的个数,称为向量的长度,查看向量中元素的个数,可以使用length命令,如下所示: • length(add.A.brand) [1] 5

  14. 1、连接命令(续) 4.在向量中删除数据: 将A.brand向量中起始位置的产品价格删除的方法用减法表示,如下表示: 例1续: > delete.A.brand<-add.A.brand[-1] > delete.A.brand [1] 27 89 189 240 将A.brand向量末尾的产品价格删除的方法是: > delete.A.brand<-add.A.brand[-length(add.A.brand)] > delete.A.brand [1] 15 27 89 189

  15. 2、序列命令seq seq命令的语法如下所示: seq(lower,upper,[increment],[length],...) 例2: > seq(1,10) [1] 1 2 3 4 5 6 7 8 9 10 > seq(1900,2000,6) [1] 1900 1906 1912 1918 1924 1930 1936 1942 1948 1954 [11] 1960 1966 1972 1978 1984 1990 1996 > seq(1,0,-0.1) [1] 1.0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0.0 > 1:10 #seq(1,10) > seq(0,1,0.05,length=10)

  16. 3、循环命令rep rep命令的语法结构如下所示: rep(pattern,number of times,length) 例3 > rep(2,6) 2 2 2 2 2 2 > rep(c(0,5),2) 0 5 0 5 > rep(1:3,3) 1 2 3 1 2 3 1 2 3 > rep(c(1,4,6),length=5) 1 4 6 1 4 思考题3: 猜测如下程序的输出结果: rep(c(1,2,3), c(1,2,3))

  17. 三、向量的算术运算 向量算术运算是对标量运算的扩展: 例4: > a<-seq(0,20,3) > 2*a 0 6 12 18 24 30 36 > a<-2*(0:2) > b<-1:3

  18. 四、向量的逻辑运算 S-Plus中有两个逻辑值:TRUE和FALSE: > 3==4 F 常用的逻辑运算符如表1.3:

  19. 向量的逻辑运算例: 例6: 假设price表示某一公司推出的所有产品价目表,将price中大于10的所有数据找出来: > price<-c(2,3,10,11,15) > large10<-price[price>10] [1] 11 15

  20. 第三节 复杂的数据结构 • 矩阵 • 数组 • 数据框架 • 列表

  21. 一、矩阵 1.定义矩阵: 例7:假定有国民经济数据data,其中显示了2003年中国、日本、韩国三个国家的国家生产总值GDP(单位:1012 US$),年末人口(单位:亿)及通货膨胀率(单位:100%): > macroecno<-c(1.4,12.92,1.2,4.5,0.56,-0.8,10.88,2.91,1.2) > asia.data<-matrix(macroecno,nrow=3,ncol=3,byrow=T,dimnames) > asia.data [,1] [,2] [,3] [1,] 1.4 12.92 1.2 [2,] 4.5 0.56 -0.8 [3,] 0.4 0.5 1.7

  22. 例题 例7续:给数据指定列名和行名: > dimnames(asia.data) NULL > dim(asia.data) 3,3 > row.name<-c("P.R.China","Japan","KOREA") > col.name<-c("GDP","POP","INFLAT") > dimnames(asia.data)<-list(row.name,NULL) > asia.data [,1] [,2] [,3] P.R.China 1.4 12.92 1.2 Japan 4.5 0.56 -0.8 KOREA 0.4 0.5 1.7 > dimnames(asia.data)<-list(NULL,col.name)

  23. 例题(续) > asia.data GDP POP INFLAT [1] 1.4 12.92 1.2 [2] 4.5 0.56 -0.8 [3] 0.4 0.5 1.7 > dimnames(asia.data)<-list(row.name,col.name) > asia.data GDP POP INFLAT P.R.China 1.4 12.92 1.2 Japan 4.5 0.56 -0.8 KOREA 0.4 0.5 1.7 > dimnames(asia.data) [[1]]: [1] "P.R.China" "Japan" "KOREA" [[2]]: [1] "GDP" "POP" "INFLAT"

  24. 1、矩阵 2.矩阵元素的表示: 矩阵a中第i,j位置的元素表示为:a[i,j],比如: > asia.data[2,1:2] GDP POP 4.5 0.56 例7续: > asia.data[2,] GDP POP INFLAT 4.5 0.56 -0.8 > asia.data["Japan","POP"]<-59#可以用行名或列名直接提取行或列向量 > asia.data["Japan","POP"] 59

  25. 1、矩阵 3.矩阵的运算: (1)元素对元素的加、减、乘、除法运算是向量的运算的确延拓。 (2)一个数与矩阵的运算相当于数与矩阵的每一个元素的运算。 (3)矩阵用%*%表示: > a [,1] [,2] [1,] 1 3 [2,] 2 4 (4)> x<-c(2,1) > a%*%x [,1] [1,] 5 [2,] 8 > solve(a) [,1] [,2] [1,] -2 1.5 [2,] 1 -0.5 思考题4. 计算asia.data中的人均GDP.

  26. 1、矩阵 4.矩阵的合并: 增加若干列用cbind函数,增加若干行用rbind函数;求矩阵列数用cnol表示,求解矩阵行数用rnol表示: > a [,1] [,2] [1,] 1 3 [2,] 2 4 > addc<-c(5,6) > a<-cbind(a,addc) > a addc [1,] 1 3 5 [2,] 2 4 6 思考题5. 在asia.data中插入Australia 数据:GDP:0.53;POP:0.10;INFL:2.3.

  27. 二、数组 数组则是多维矩阵,生成数组与生成矩阵类似: > a<-array(1:24,c(3,4,2)) > a , , 1 [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 , , 2 [,1] [,2] [,3] [,4] [1,] 13 16 19 22 [2,] 14 17 20 23 [3,] 15 18 21 24

  28. 2.数组的行列计算函数: apply(data,dim,function,...) 例1.7续:计算asia.data中GDP,POP,INFLAT的最小值: > apply(asia.data,2,min) GDP POP INFLAT 0.4 0.5 -0.8 例1.7续:求数组asia.data中的最小值所在的行和列: > col(a)[asia.data==min(asia.data)] > 3 > row(a)[asia.data==min(asia.data)] > 2 思考题6. 请输出asia.data中GDP最小值所在的行和列.

  29. 三、数据框架 数据框架可以理解为二维数据表,其中不同列具有不同的数据类型。 > asia.frame<-data.frame(asia.frame,IS.AS) > asia.frame GDP POP INFLAT IS.AS P.R.China 1.4 12.92 1.2 AS Japan 4.5 0.56 -0.8 AS KOREA 0.4 0.5 1.7 AS > apply(asia.data,2,max) GDP POP INFLAT 4.5 12.92 1.7

  30. 四、列表 列表是比数据框架更为松散的数据结构,列表可以将不同类型,不同长度的数据打包,而数据框架中要求被插入的数据长度和原来的长度是一致的。 > IS.AS<-c("P.R.China","Japan","KOREA") > list(asia.frame,country) [[1]]: GDP POP INFLAT IS.AS P.R.China 1.4 12.92 1.2 AS Japan 4.5 0.56 -0.8 AS KOREA 1.4 4.5 0.4 AS [[2]]: [1] "P.R.China" "Japan" "KOREA"

  31. 第四节 数据处理 1.从键盘输入数据: 例8: > x_scan( ) 1: 23 45 68 8 5: 34 7 7: > x [1] 23 45 68 8 34 7 2.读入矩阵: 例9: > matrix(scan("c:\\data\\wh.txt"),,3) V1 V2 V3 1 0.64 0.32 0 2 0.28 0.14 1 3 0.00 1.23 0

  32. 第四节 数据处理 3.读入数据框架: >a_read.table("c:\\data\\wh.txt",header=T) V1 V2 V3 1 0.64 0.32 0 2 0.28 0.14 1 3 0.00 1.23 0

  33. 第四节 数据处理 编写函数: 常用的函数控制命令及语法如下所示: • 控制结构:if (condition) {语句1} else {语句2} • 循环结构: • for (变量 in 序列) 语句 • while ( condition) 语句 • repeat (语句) • 跳出:break

  34. 举例 例11:计算1,2,…数列的连乘积,直到积大于105. \small\begin{verbatim} > n<-0 #iteration counter > times.so.far<-1 while (times.so.far<=10^5) { n <-n+1 times.so.far <-times.so.far*n }

  35. 常用统计函数 • dnorm(x): 计算标准正态分布点x处的密度值; • pnorm(x,2,1) : 计算均值为2,标准差为1的正态分布点x处的分布函数值P(X<x); • qnorm(p,3,2) :计算均值为3,标准差为2的正态分布p-分位数; • rnorm(n) : 产生标准正态分布伪随机数n个.

  36. 第五节 S-Plus图形功能 x <- 1:20 y <- x**3 plot(x,y) points(rev(x),y) lines(x,5432-0.5*y) points(x^0.5,y,pch=3) #add crosses points(x,8000-y,pch="$") #use a dollar symbol lines(x,y,lwd=4) # thick line lines(rev(x),y,lty=2) # dashed line plot(x,y,xlab="X Is Across",ylab="Y is Up") title("Titles are Tops") text(6,4000,"This goes anywhere")

  37. 作图:继续 y <- rt(200, df = 5) qqnorm(y) qqline(y, col = 2) x <- seq(-10, 10, length= 30) y <- x f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r } z <- outer(x, y, f) persp(x, y, z)

  38. 本章内容回顾 • 熟悉在S-Plus命令行中S-Plus基本数据处理 • 熟悉在S-Plus命令行中进行基本数据基本运算 • 编写简单的计算函数 • 绘制基本图形

More Related