410 likes | 535 Views
第二章 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 的主要应用特点:.
E N D
本章要求 • 熟悉在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的主要应用特点: • 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,反之亦然。
S-Plus界面六项内容: • Object Explorer(对象浏览器); • Commands Window(命令窗口) ; • Graph Sheets(图形操作表) ; • Script Window(草稿窗口); • Menus(菜单); • Toolbars(工具栏)。
第二节 向量的基本操作 一、向量的定义和表示 二、向量的基本操作 二、向量的算术运算 三、向量的逻辑运算
一、向量的定义 一、算术运算: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
一、 向量的定义 二、赋值: > x<-3 > y_1+x 屏幕打印变量如下,x: > x > 3 > print(x*y) > 12
二、向量的基本操作 1、连接命令; 2、序列命令seq; 3、循环命令rep;
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
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个位置后插入数据?
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
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
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)
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))
三、向量的算术运算 向量算术运算是对标量运算的扩展: 例4: > a<-seq(0,20,3) > 2*a 0 6 12 18 24 30 36 > a<-2*(0:2) > b<-1:3
四、向量的逻辑运算 S-Plus中有两个逻辑值:TRUE和FALSE: > 3==4 F 常用的逻辑运算符如表1.3:
向量的逻辑运算例: 例6: 假设price表示某一公司推出的所有产品价目表,将price中大于10的所有数据找出来: > price<-c(2,3,10,11,15) > large10<-price[price>10] [1] 11 15
第三节 复杂的数据结构 • 矩阵 • 数组 • 数据框架 • 列表
一、矩阵 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
例题 例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)
例题(续) > 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"
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
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.
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.
二、数组 数组则是多维矩阵,生成数组与生成矩阵类似: > 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
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最小值所在的行和列.
三、数据框架 数据框架可以理解为二维数据表,其中不同列具有不同的数据类型。 > 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
四、列表 列表是比数据框架更为松散的数据结构,列表可以将不同类型,不同长度的数据打包,而数据框架中要求被插入的数据长度和原来的长度是一致的。 > 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"
第四节 数据处理 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
第四节 数据处理 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
第四节 数据处理 编写函数: 常用的函数控制命令及语法如下所示: • 控制结构:if (condition) {语句1} else {语句2} • 循环结构: • for (变量 in 序列) 语句 • while ( condition) 语句 • repeat (语句) • 跳出:break
举例 例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 }
常用统计函数 • dnorm(x): 计算标准正态分布点x处的密度值; • pnorm(x,2,1) : 计算均值为2,标准差为1的正态分布点x处的分布函数值P(X<x); • qnorm(p,3,2) :计算均值为3,标准差为2的正态分布p-分位数; • rnorm(n) : 产生标准正态分布伪随机数n个.
第五节 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")
作图:继续 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)
本章内容回顾 • 熟悉在S-Plus命令行中S-Plus基本数据处理 • 熟悉在S-Plus命令行中进行基本数据基本运算 • 编写简单的计算函数 • 绘制基本图形