splus教程.docx
- 文档编号:17659094
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:59
- 大小:51.96KB
splus教程.docx
《splus教程.docx》由会员分享,可在线阅读,更多相关《splus教程.docx(59页珍藏版)》请在冰点文库上搜索。
splus教程
目录
目录1
写在前面2
第一章S_Plus简介2
第二章S向量2
§2.1S语言简介2
§2.2常量2
§2.3向量(Vector)与赋值2
§2.4向量运算2
§2.5产生有规律的数列2
§2.6逻辑向量2
§2.7字符型向量2
§2.8复数向量2
§2.9向量下标运算2
第三章S对象2
§3.1固有属性:
mode和length2
§3.2修改对象长度2
§3.3attributes()和attr()函数2
§3.4对象的class属性2
第四章多纬数组和矩阵2
§4.1数组和矩阵2
§4.2数组下标2
§4.3不规则数组下标2
§4.4数组四则运算2
§4.5矩阵运算2
§4.6矩阵合并与拉直2
§4.7数组的维名字2
§4.8数组的外积2
§4.9数组的广义转置2
§4.10apply函数2
第五章因子和有序因子2
第六章列表2
§6.1列表定义2
§6.2修改列表2
§6.3几个返回列表的函数2
第七章数据框(data.frame)2
§7.1数据框生成2
§7.2数据框引用2
§7.3attach()函数2
第八章输入输出2
§8.1输出2
§8.2输入2
第九章程序控制结构2
§9.1分支结构2
§9.2循环结构2
第十章S程序设计2
§10.1工作空间管理2
§10.2函数定义2
§10.3参数(自变量)2
§10.4作用域2
§10.5程序调试2
第十一章S统计模型2
§11.1线性回归模型2
§11.2方差分析2
第十三章S常用函数参考2
§13.1基本函数2
§13.2数学函数2
写在前面
经过一星期的工作,我终于完成了《S_Plus使用简介》。
S_Plus是S语言的运行环境,用S语言进行统计分析具有诸多优点,可以很方便地完成几乎所有的统计分析工作,因此,如果专门从事统计分析工作,最好能掌握它。
本电子书将重点放在了S语言的介绍上,S语言是一个较大的语言系统,S_Plus2000所带的PDF文件共有上千页,本电子书只是对S语言简单扼要的介绍,若要详细了解S语言,可参照S_Plus2000中的PDF文件。
本电子书是为参加美国大学生数学建模竞赛而编的参考资料,但依我所见,若只是进行简单的数据分析,完全没有必要专门学习S语言,Matlab中有一个统计工具箱,其中提供了大量的统计函数,用其便可以完成几乎所有简单的统计功能,诸如统计作图、参数估计、假设检验、回归分析、方差分析等等,大家可以参考科学出版社的《Matlab数理统计(6.x)》。
本电子书参考并拷贝了大量电子资料,在此表示感谢。
中国科大孟强
2003.1.25
第一章S_Plus简介
S_Plus是由美国MathSoft公司开发的一种基于S语言的统计学软件,是世界上公认的三大统计软件之一,主要用于数据挖掘、统计分析和统计作图等等。
S_Plus的最大特点在于它可以交互地从各方面发现数据中的信息,并可以很容易地实现一个新的统计方法。
另外,S_Plus的数据可以直接的来源于Excel,Lotus,Access,SAS,SPSS等软件,其兼容性极好。
本章中,我们简单地熟悉一下S_Plus的桌面环境,从下一章起,我们将系统地介绍S语言。
进入S_Plus系统,便直接进入了Commands窗口,Commands窗口由提示符“>”开始,后面便可以直接写S语言代码,由于S语言是一种解释性语言,因此,输入代码敲回车后,便可直接在Commands窗口看到运行结果,其运行方式和Matlab相似,在此不再赘述。
下面是一个S语言的程序实例,其具体的语法含义和函数功能我们将在以后介绍。
>marks<-c(10,6,4,7,8)将几个数字组成一个列向量
>mean(marks)求该向量的算术平均值
[1]7得出结果
>median(marks)求该向量的中位数
[1]7得出结果
>min(marks)求向量元素的最小值
[1]4得出结果
>max(marks)求向量元素的最大值
[1]10得出结果
>boxplot(marks)绘出盒形图
第二章S向量
§2.1S语言简介
S_Plus基于S语言,S语言是由AT&T贝尔实验室开发的一种用来进行数据探索、统计分析、作图的解释型语言。
它的丰富的数据类型(向量、数组、列表、对象等)特别有利于实现新的统计算法,其交互式运行方式及强大的图形及交互图形功能使得我们可以方便的探索数据。
从本章起到第十三章,我们来介绍S语言。
本章介绍S向量。
S语言是基于对象的语言,不过它的最基本的数据还是一些类型,如向量、矩阵、列表(list)等。
更复杂的数据用对象表示,比如,数据框对象,时间序列对象,模型对象,图形对象,等等。
S语言表达式可以使用常量和变量。
变量名的规则是:
由字母、数组、句点组成,第一个字符必须是字母,长度没有限制。
大小写是不同的。
特别要注意句点可以作为名字的合法部分,而在其它面向对象语言中句点经常用来分隔对象与成员名。
另外,下划线不能用在名字中,因为它是赋值符号“<-”的缩写。
§2.2常量
常量可以笼统地分为逻辑型、数值型和字符型三种,实际上数值型数据又可以分为整型、单精度、双精度等,非特殊需要不必太关心其具体类型。
例如,123,123.45,1.2345e30是数值型常量,"Weight","李明"是字符型(用两个双撇号或两个单撇号包围)。
逻辑真值写为T或TRUE(注意区分大小写,写t或true都没意义),逻辑假值写为F或FALSE。
复数常量就用3.5-2.1i这样的写法表示。
S中的数据可以取缺失值,用符号NA代表缺失值。
函数is.na(x)返回x是否缺失值(真
还是假)。
§2.3向量(Vector)与赋值
向量是具有相同基本类型的元素序列,大体相当于其他语言中的一维数组。
实际上在S
中标量常量也被看作是长度为1的向量。
定义向量的最常用办法是使用函数c(),它把若干个数值或字符串组合为一个变量,比如:
>marks<-c(10,6,4,7,8)
>x<-c(1:
3,10:
13)
>x
[1]12310111213
>x1<-c(1,2)
>x2<-c(3,4)
>x<-c(x1,x2)
>x
[1]1234
在显示向量值时我们注意到左边总出现一个“[1]”,这是代表该显示行的第一个数的下标,例如:
>1234501:
1234520
[1]1234501123450212345031234504123450512345061234507123450812345091234510
[11]1234511123451212345131234514123451512345161234517123451812345191234520
第二行输出从第11个数开始,所以在行左边显示“[11]”。
S中用符号“<-”(这是小于号紧接一个减号)来为变量赋值。
另一种赋值的办法是用assign函数,比如
>x1<-c(1,2)
和
>assign("x1",c(1,2))
效果相同。
函数length(x)可以计算向量x的长度。
§2.4向量运算
可以对向量进行加(+)减(-)乘(*)除(/)、乘方(^)运算,其含意是对向量的每一个元素进行运算。
;例如:
>x<-c(1,4,6.25)
>y<-x*2+1
>y
[1]3.09.013.5
另外,%/%表示整数除法(比如5%/%3为1),%%表示求余数(如5%%3为2)。
也可以用向量作为函数自变量,sqrt、log、exp、sin、cos、tan等函数都可以用向量作
自变量,结果是对向量的每一个元素取相应的函数值,如:
>sqrt(x)
[1]1.02.02.5
函数min和max分别取自变量向量的最小值和最大值,函数sum计算自变量向量的元
素和,函数mean计算均值,函数var计算样本方差,函数sd计算标准差(在Splus中用sqrt(var())计算),函数range返回包含两个值的向量,第一个值是最小值,第二个值是最大值。
例如:
>max(x)
[1]6.25
如果求var(x)而x是pn×矩阵,则结果为样本协方差阵。
sort(x)返回x的元素从小到大排序的结果向量。
order(x)返回使得x从小到大排列的元素下标向量(x[order(x)]等效于order(x))。
任何数与缺失值的运算结果仍为缺失值。
例如,
>2*c(1,NA,2)
[1]2NA4
>sum(c(1,NA,2))
[1]NA
§2.5产生有规律的数列
在S中很容易产生一个等差数列。
例如,1:
n产生从1到n的整数列,-2:
3产生从-2到
3的整数列,5:
2产生反向的数列:
>n<-5
>1:
n
[1]12345
>-2:
3
[1]-2-10123
>5:
2
[1]5432
要注意1:
n-1不是代表1到n-1而是向量1:
n减去1,这是一个常犯的错误:
>1:
n-1
[1]01234
>1:
(n-1)
[1]1234
seq函数是更一般的等差数列函数。
如果只指定一个自变量n>0,则seq(n)相当于1:
n。
指定两个自变量时,第一自变量是开始值,第二自变量是结束值,如seq(-2,3)是从-2到3。
S函数调用的一个很好的特点是它可以使用不同个数的自变量,函数可以对不同类型的自变量给出不同结果,自变量可以用“自变量名=”的形式指定。
例如,seq(-2,3)可以写成seq(from=-2,to=3)。
可以用一个by参数指定等差数列的增加值,例如:
>seq(0,2,0.7)
[1]0.00.71.4
也可以写成seq(from=0,to=2,by=0.7)。
有参数名的参数的次序任意,如:
>seq(0,by=0.7,to=2)
[1]0.00.71.4
可以用length参数指定数列长度,如seq(from=10,length=5)产生10到14。
seq函数还可以用一种seq(along=向量名)的格式,这时只能用这一个参数,产生该向量的下标序列,如:
>x
[1]1.004.006.25
>seq(along=x)
[1]123
另一个类似的函数是rep,它可以重复第一个自变量若干次,例如:
>rep(x,3)
[1]1.004.006.251.004.006.251.004.006.25
第一个参数名为x,第二个参数名为times(重复次数)。
§2.6逻辑向量
向量可以取逻辑值,如:
>l<-c(T,T,F)
>l
[1]TRUETRUEFALSE
当然,逻辑向量是一个比较的结果,如:
>x
[1]1.004.006.25
>l<-x>3
>l
[1]FALSETRUETRUE
一个向量与常量比较大小,结果还是一个向量,元素为每一对比较的结果逻辑值。
两个向量也可以比较,如:
>log(10*x)
[1]2.3025853.6888794.135167
>log(10*x)>x
[1]TRUEFALSEFALSE
比较运算符包括<,<=,>,>=,==(相等),!
=(不等)。
两个逻辑向量可以进行与(&)、或(|)运算,结果是对应元素运算的结果。
对逻辑向量x计算!
x表示取每个元素的非。
判断一个逻辑向量是否都为真值的函数是all,如:
>all(log(10*x)>x)
[1]FALSE
判断是否其中有真值的函数是any,如:
>any(log(10*x)>x)
[1]TRUE
函数is.na(x)用来判断x的每一个元素是否缺失。
如:
>is.na(c(1,NA,3))
[1]FALSETRUEFALSE
逻辑值可以强制转换为整数值,TRUE变成1,FALSE变成0。
例如,我们以age>65
为老年人,否则为年轻人,可以用c("young","old")[(age>65)+1]这样的表示。
当年龄大于65
时age>65等于TRUE,加1必须把TRUE转换为数值型的1,得2,于是返回第二个下标处的“old”。
否则等于0+1下标处的“young”
§2.7字符型向量
向量元素可以取字符串值。
例如:
>c1<-c("x","sin(x)")
>c1
[1]"x""sin(x)"
>ns<-c("Weight","Height","年龄")
>ns
[1]"Weight""Height""年龄"
paste函数用来把它的自变量连成一个字符串,中间用空格分开,例如:
>paste("My","Job")
[1]""MyJob"
连接的自变量可以是向量,这时各对应元素连接起来,长度不相同时较短的向量被重复使用。
自变量可以是数值向量,连接时自动转换成适当的字符串表示,例如:
>paste(c("X","Y"),"=",1:
4)
[1]""X=1""Y=2""X=3""Y=4"
分隔用的字符可以用sep参数指定,例如下例产生若干个文件名:
>paste("result.",1:
6,sep="")
[1]""result.1""result.2""result.3""result.4""result.5""result.6"
如果给paste()函数指定了collapse参数,则paste()可以把一个字符串向量的各个元素连
接成一个字符串,中间用collapse指定的值分隔。
比如paste(c('a','b'),collapse='.')得到'a.b'。
§2.8复数向量
S支持复数运算。
复数常量只要用我们通常的如3.5+2.1i的格式即可。
complex模式的向量为复数元素的向量。
可以用complex()函数生成复数向量(见帮助)。
Re()计算实部,Im()计算虚部,Mod()计算复数模,Arg()计算复数幅角。
§2.9向量下标运算
S提供了十分灵活的访问向量元素和向量子集的功能。
某一个元素只要用x[i]的格式访问,其中x是一个向量名,或一个取向量值的表达式,如:
>x
[1]1.004.006.25
>x[2]
[1]4
>(c(1,3,5)+5)[2]
[1]8
可以单独改变一个元素的值,例如:
>x
[1]1.00125.006.25
事实上,S提供了四种方法来访问向量的一部分,格式为x[v],x为向量或向量值的表达式,v是如下的表示下标向量:
一、取正整数值的下标向量
v为一个向量,取值在1到length(x)之间,取值允许重复,例如,
>x[c(1,3)]
[1]1.006.25
>x[1:
2]
[1]1125
>x[c(1,3,2,1)]
[1]1.006.25125.001.00
>c("a","b","c")[rep(c(2,1,3),3)]
[1]"b""a""c""b""a""c""b""a""c"
二、取负整数值的下标向量
v为一个向量,取值在-lenght(x)到-1之间,例如:
>x[-(1:
2)]
[1]6.25
表示扣除相应的元素。
三、取逻辑值的下标向量
v为和x等长的逻辑向量,x[v]表示取出所有v为真值的元素,如:
>x
[1]1.00125.006.25
>x<10
[1]TRUEFALSETRUE
>x[x<10]
[1]1.006.25
可见x[x<10]取出所有小于10的元素组成的子集。
这是一种强有力的检索工具,例
如x[sin(x)>0]可以取出x中所有正弦函数值为正的元素组成的向量。
如果下标都是假值则结果是一个零长度的向量,显示为numeric(0)。
四、取字符型值的下标向量
在定义向量时可以给元素加上名字,例如:
>ages<-c(Li=33,Zhang=29,Liu=18)
>ages
LiZhangLiu
332918
这样定义的向量可以用通常的办法访问,另外还可以用元素名字来访问元素或元素子集,例如:
>ages["Zhang"]
Zhang
29
>ages[c("Li","Liu")]
LiLiu
3318
向量元素名可以后加,例如:
>ages1<-c(33,29,18)
>names(ages1)<-c("Li","Zhang","Liu")
>ages1
LiZhangLiu
332918
上面我们看到了如何访问向量的部分元素。
在S中还可以改变一部分元素的值,例如:
>x
[1]1.00125.006.25
>x[c(1,3)]<-c(144,169)
>x
[1]144125169
注意赋值的长度必须相同,例外是可以把部分元素赋为一个统一值:
>x[c(1,3)]<-0
>x
[1]01250
要把向量所有元素赋为一个相同的值而又不想改变其长度,可以用x[]的写法:
>x[]<-0
注意这与“x<-0”是不同的,前者赋值后向量长度不变,后者使向量变为标量0。
改变部分元素值的技术与逻辑值下标方法结合可以定义向量的分段函数,例如,要定义y=f(x)为当x<0时取1-x,否则取1+x,可以用:
>y<-numeric(length(x))
>y[x<0]<-1-x[x<0]
>y[x>=0]<-1+x[x>0]
第三章S对象
S是一种基于对象的语言。
S的对象包含了若干个元素作为其数据,另外还可以有一些
特殊数据称为属性(attribute),并规定了一些特定操作(如打印、绘图)。
比如,一个向量是一个对象,一个图形是一个对象。
S并不是一个象C++那样的面向对象语言,它的数据具有一些对象的特点,并不支持类机制。
S对象分为单纯的(atomic)和复合的(recursive)两种,单纯对象的所有元素都是同一种基本类型(如数值、字符串),元素不再是对象;复合对象的元素可以是不同类型的对象,每一个元素是一个对象。
向量(vector)是单纯对象。
§3.1固有属性:
mode和length
S对象都有两个基本的属性(attribute):
mode(类型)属性和length(长度)属性。
比如向量的类型为logical(逻辑型)、numeric(数值型)、complex(复数型)、character(字符型),比如mode(c(1,3,5)>5)结果为字符串“logical”。
S对象有一种特别的null(空值型)型,只有一个特殊的NULL值为这种类型,表示没有值(不同于NA,NA是一种特殊值,而NULL根本没有对象值)。
后面讲到的列表类型为list。
要判断某对象是否某类型,有许多个类似于is.numeric()的函数可以完成。
is.numeric(x)用来检验对象x是否数值型,它返回一个逻辑型结果。
is.character()可以检验对象是否字符型,等等。
长度属性表示S对象元素的个数,比如length(2:
4)等于3。
注意向量允许长度为0,比如数值型向量长度为零表示为numeric()或numeric(0),字符型向量长度为零表示为character()或character(0)。
S可以强制进行类型转换,例如
>z<-0:
9
>digits<-as.character(z)
>d<-as.numeric(digits)
第二个赋值把数值型的z转换为字符型的digits。
第三个赋值把digits又转换为了数值型的d,这时d和z是一样的了。
S还有许多这样的以as.开头的类型转换函数。
§3.2修改对象长度
对象可以取0长度或正整数为长度。
S允许对超出对象长度的下标赋值,这时对象长度自动伸长以包括此下标,未赋值的元素取缺失值(NA),例如:
>x<-numeric()
>x[3]<-100
>x
[1]NANA100
要缩短对象的长度又怎么办呢?
只要给它赋一个长度短的子集就可以了。
例如:
>x<-1:
3
>x<-1:
4
>x<-x[1:
2]
>x
[1]12
§3.3attributes()和attr()函数
attributes(object)返回对象object的各特殊属性组成的列表,不包括固有属性mode和length。
例如:
>x<-c(apple=2.5,orange=2.1)
>attributes(x)
$names
[1]"apple""orange"
可以用attr(object,name)的形式存取对象object的名为name的属性。
例如:
>attr(x,"name")
[1]"apple""orange"
也可以把attr()函数写作赋值的左边以改变属性值或定义新的属性,例如:
>attr(x,"names")<-c("apple","grapes")
>x
applegrapes
2.52.1
>attr(x,"type")<-"fruit"
>x
applegrapes
2.52.1
attr(,"type")
[1]"fruit"
>attributes(x)
$names
[1]"apple""grapes"
$type
[1]"fruit"
§3.4对象的class属性
在S中可以用特殊的class属性来支持面向对象的编程风格,对象的class属性用来区分对象的类,可以写出通用函数根据对象类的不同进行不同的操作,比如,print()函数对于向量和矩阵的显示方法就不同,plot()函数对不同类的自变量作不同的图形。
为了暂时去掉一个有类的对象的class属性,可以使用unclass(object)函数。
第四章多纬数组和矩阵
§4.1数组和矩阵
数组(array)可以看成是带多个下标的类型相同的元素的集合,常用的是数值型的数组如矩阵,也可以有其它类型(如字符型、逻辑型、复型数组)。
S可以很容易地生成和处理数组,特别是矩阵(二维
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- splus 教程
![提示](https://static.bingdoc.com/images/bang_tan.gif)