2024年1月9日发(作者:心理测试数学试卷及答案)
1.R基础
§1.1 引言
一、什么是R
1.R是一个有着统计分析功能和强大作图功能的软件系统
2.R是面向对象的数学编程编程语言S语言的一种实现
3.R是Ross Ihaka和Robert Gentleman于1996年创立,由全世界的统计学家共同维护
4.R是完全免费的
5.R的语法和函数格式与S-Plus非常相似
二、R的优点
1.使用容易、灵活
2.总是处于统计知识的最前沿
3.完全免费
4.在命令行交互平台(R的控制台)中使用
三、R的下载与安装
1.
2.Download, Packages: “CRAN” (Comprehensive R Achive Network)
3.链接到某个镜像点
4.Download and Install R: “windows” “base”
5.Download R 2.13.0 for windows
6.安装并运行R
以上安装过程只安装R的核心部份和一些基本程序包(大约25个)。但在解决一些复杂问题时,我们需要的函数可能不在基本程序包中,这些函数所在的程序包要从R的官方网站上下载并安装到你的磁盘上。这些附加程序包在使用前还要从磁盘加载到内存中(基本程序包是内置的,在运行R时就已经加载了)。下载和安装附加程序包可通过程序包菜单中的菜单命令来完成,加载附加程序包既可通过通过程序包菜单中的菜单命令来完成,也可用library( )函数来实现,这个函数的参数为要加载的附加程序包名。
四、R的工作原理
1.R是一种解释型语言,而不是编译型语言
2.由于R是一种解释型的语言,所有的命令均可以直接输入控制台。R的最简单使用是将R当作一个高级计算器。
3.R的语法非常简单直观,通过一些运算符和函数来对对象(objects)进行操作
4.R的运算符有:赋值、算术、比较、逻辑
> 2+3 > 2/3 > sqrt(3) > (5-3)*log10(5) sin(x)
cosh(x)
[1] 5 [1]0.6666667 [1]1.732051 [1]1.39794 cos(x)
sinh(x)
> 2-3 > 2^3 > log(3) > abs(2-3) tan(x)
tanh(x)
[1] 1
[1] -1 [1] 8 [1] 1.098612 asin(x)
acosh(x)
> 2*3 > (2-3)*4 > exp(log(3)) acos(x)
asinh(x)
[1] 6 [1] -4 [1] 3
atan(x)
atanh(x)
5.R的函数总是带有圆括号。如果只输入函数名而不带圆括号,则会显示该函数的R代码内容,圆括号中可以有参数,也可以没有参数。R在调用函数时实参与形参之间的匹配方式有两种,位置匹配和名称匹配了。通过调用函数args(函数名)可查看函数的形参。R的很多参数有预设值,使用预设值的参数在调用时不用输入实参。在R中很多事情都是通过函数调用来完成。有些事情可也可通过菜单来完成。
6.所有的变量、数据、函数、结果都以对象的形式保存在R的工作空间中,并冠以相应的名字代码。对象的名字必须以一个字母开始,中间可以包含字母、数字、点及下划线。R的对象名区分大小写。
五、对象的建立、列示和删除
1.通过赋值操作产生对象
> x<-3
> x
[1] 3
> m=8*log(2)
> m
[1] 5.545177
> x=x+y
> x
[1] 8.545177
> name=\"Xiamen University\"
> name
[1] \"Xiamen University\"
> x*4+sqrt(y)
[1] 36.53553
2.列示对象
> ls()
[1] \"m\" \"name\" \"x\"
> ls(pat=\"m\")
[1] \"m\" \"name\"
> ()
m : num 5.55
name : chr \"Xiamen University\"
> y=(y1=c(1,3,7),y2=1:3,y3=c(2,5,1))
> y
3.删除对象
> ls()
[1] \"m\" \"name\" \"x\" \"y\"
> rm(y)
> ls()
[1] \"m\" \"name\" \"x\"
> rm(list=ls(pat=\"m\"))
> y=6
> ls()
[1] \"x\" \"y\"
> rm(list=ls())
> ls()
character(0)
y1 y2 y3
1 1 1 2
2 3 2 5
3 7 3 1
> ()
m : num 5.55
name : chr \"Xiamen University\"
x : num 8.55
y : \'\': 3 obs. of 3 variables:
$ y1: num 1 3 7
$ y2: int 1 2 3
$ y3: num 2 5 1
六、在线帮助
?ls
?
§1.2 数据对象
R通过一些对象来运行,对象是用它的名称和内容来刻划,其次也通过对象的数据类型或者存贮方式来刻划。R中常用数据类型或者存贮方式有数值型(numeric)、字符型(character)和逻辑型(logical)。对象的数据类型可通过函数mode( )或typeof( )来得到。使用as.?( )类函数可将一种数据类型转变成另外一种数据类型。使用is.?( )类函数可判断对象的数据类型是否是某指定的类型。依据数据在对象中结构的不同,对象可分成各种不同的类别。对象的类别可通过函数class (对象名)来查询。
一、向量的赋值
1.c( )函数
> x=c(10 , 5 , 4 , 9 , 3)
> x
[1] 10 5 4 9 3
2.scan( )函数
> x=scan()
1: 2 3 3 5
5: 5 6
7:
Read 6 items
> x
[1] 2 3 3 5 5 6
3.:运算符( : 的优先级高于 + - * / )
> x=1:4
> x
[1] 1 2 3 4
> y=5:2
> y
[1] 5 4 3 2
> z=2.41:5
> z
[1] 2.41 3.41 4.41
4.seq( )函数
> seq(-3,3)
[1] -3 -2 -1 0 1 2 3
> seq(-3,3,1.5)
[1] -3.0 -1.5 0.0 1.5 3.0
> seq(-3,3,len=6)
[1] -3.0 -1.8 -0.6 0.6 1.8 3.0
> seq(3,-3,len=6)
[1] 3.0 1.8 0.6 -0.6 -1.8 -3.0
> seq(3,-3,-1.5)
[1] 3.0 1.5 0.0 -1.5 -3.0
> w=2:6.3
> w
[1] 2 3 4 5 6
> u=1:7-1
> u
[1] 0 1 2 3 4 5 6
> v=2*1:6
> v
[1] 2 4 6 8 10 12
> y=c(x,0,x)
> y
[1] 10 5 4 9 3 0.0 10 5 4 9 3 >
5.rep( )函数
> rep(1,5)
[1] 1 1 1 1 1
> rep(c(1,2),3)
[1] 1 2 1 2 1 2
> c(rep(1,3),rep(2,4))
[1] 1 1 1 2 2 2 2
> oops <- c(7,9,13)
> rep(oops,3)
[1] 7 9 13 7 9 13 7 9 13
> rep(oops,1:3)
[1] 7 9 9 13 13 13
> rep(1:2,c(3,5))
[1] 1 1 1 2 2 2 2 2
>rep(1:2,each=3)
[1] 1 1 1 2 2 2
> rep(1:2,c(3,3))
[1] 1 1 1 2 2 2
二、向量的运算
R中向量的+、-、*、/、^运算是对分量进行的。若两个向量的长度不同,则较短的向量的分量将被循环使用。若长的向量长度不是短的向量长度的整倍数,将会给出警告信息。
> x=c(2.1, 3.3, 4.8);
> y=1:3
> 2*x+y+2;
[1] 7.2 10.6 14.6
> x*y;
[1] 2.1 6.6 14.4
> x/y;
[1] 2.10 1.65 1.60
> x^y
[1] 2.100 10.890 110.592
> 2^y;
[1] 2 4 8
> x^3;
[1] 9.261 35.937 110.592
> log(x);
[1]0.7419373 1.1939225 1.5686159
> sqrt(x*y);
[1] 1.449138 2.569047 3.794733
> exp(y)
[1] 2.718282 7.389056 20.085537
三、与向量运算有关的函数
sum prod max min cumsum cumprod cummax cumin
length mean median var sd range fivenum quantile sort order rank
四、逻辑向量与字符型向量
逻辑真:TRUE、T
逻辑假:FALSE、F
比较运算符:<、<= 、> 、>=、= =、!=
逻辑运算符:&、|、!
与逻辑向量有关的函数:all()、any()
> 1:2>1
[1]FALSE TRUE
x= c(\'apple\',\'orange\')
> x
[1] \"apple\" \"orange\"
> y= c(\"apple\",\'orange\')
> y
[1] \"apple\" \"orange\"
>all(1:2>1);any(1:2>1)
[1]FALSE
[1]TRUE
> paste(\'My\',\'Job\')
[1] \"My Job\"
> paste(\'x\',1:6,sep=\'\'); paste(\'x\',1:6,sep=\'-\')
[1] \"x1\" \"x2\" \"x3\" \"x4\" \"x5\" \"x6\"
[1] \"x-1\" \"x-2\" \"x-3\" \"x-4\" \"x-5\" \"x-6\"
> paste(\'result.\',1:3,sep=\'\'); paste(1:8)
[1] \"result.1\" \"result.2\" \"result.3\"
[1] \"1\" \"2\" \"3\" \"4\" \"5\" \"6\" \"7\" \"8\"
> paste(\'Today is\',date())
[1] \"Today is Thu Jun 10 23:38:34 2010\"
五、一些特殊值及相关函数
缺失值:NA
不确定值:NaN
无穷大:Inf
圆周律:pi
相关函数:() () () te()
六、向量下标运算
> x=1:4
> x[2]
[1] 2
> x[2]=-9
> x
[1] 1 -9 3 4
> x[c(1,4)]=c(12,13)
> x
[1] 12 -9 3 13
> x[x<=3]
[1] -9 3
> (1:4+2)[3]
[1] 5
> y=c(-1,1:3,NA)
> y
[1] -1 1 2 3 NA
> y[(y)]=0
> y
[1] -1 1 2 3 0
> y=c(-1,1:3,NA)
> y
[1] -1 1 2 3 NA
> y[!(y)]
[1] -1 1 2 3
> (y+1)[(!(y))&(y>0)]
[1] 2 3 4
> x=-3:3; y=length(x);
> x;y
[1] -3 -2 -1 0 1 2 3
[1] 7
> y[x<0]=1-x[x<0]
> y[x>=0]=1+x[x>=0]
> x;y
[1] -3 -2 -1 0 1 2 3
[1] 4 3 2 1 2 3 4
>v=10:20; v[1:5]; v[-(1:5)];
[1] 10 11 12 13 14
[1] 15 16 17 18 19 20
>v[c(1,3,5,9)]
[1] 10 12 14 18
> v[c(1,2,3,2,1)]
[1] 10 11 12 11 10
>c(\"a\",\"b\")[rep(c(2,1),2)]
[1] \"b\" \"a\" \"b\" \"a\"
> age=c(Wu=28, Liu=22);
> age[\'Liu\']
Liu
22
> fruit=c(5,10,1,20)
> fruit
[1] 5 10 1 20
> names(fruit)= c(\'orange\',
+\'banana\',\'apple\',\'peach\')
> fruit
orange banana apple peach
5 10 1 20
七、矩阵的构造
当向量定义了维数属性后就变成了矩阵,因此矩阵实际上就是一个带有维数属性的向量。函数dim()可用于获取和定义对象的维数属性。注意,矩阵的元素是按列存放的。
用matrix()函数也可构造矩阵,matrix()函数的一般使用格式为
matrix(data=NA, nrow=1, ncol=1, byrow=FALSE, dimnames=NULL)
函数rbind()和cbind()可将向量组合成矩阵。colnames( )可用来给矩阵的列取名字。
> z=1:4
> z
[1] 1 2 3 4
> dim(z)
NULL
> dim(z)=c(2,2)
> z
[,1] [,2]
[1,] 1 3
2 4
[2,]
> dim(z)
[1] 2 2
> A=matrix(1:8, nrow=2, ncol=4)
> A
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7
[2,] 2 4 6 8
> B=matrix(1:8, 2, 4, byrow=T);
> B
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
> x=1:3; y=11:13
> rbind(x,y)
[,1] [,2] [,3]
x 1 2 3
y 10 11 12
> cbind(x,y)
x y
[1,] 1 11
[2,] 2 12
[3,] 3 13
> colnames(A)=c(\'a\',\'b\',\'c\',\'d\')
八、矩阵的运算
1.转置 2.元素对元素的运算
> A=matrix(1:6,2,3)
> A
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> t(A)
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
> A= matrix(1:4,2,2)
>B=A
> A+B
[,1] [,2]
[1,] 2 6
[2,] 4 8
> A-B
[,1] [,2]
[1,] 0 0
[2,] 0 0
> A*B
[,1] [,2]
[1,] 1 9
[2,] 4 16
> A/B
[,1] [,2]
[1,] 1 1
[2,] 1 1
> A^2
[,1] [,2]
[1,] 1 9
[2,] 4 16
> sqrt(A)
[,1] [,2]
[1,] 1.000000 1.732051
[2,] 1.414214 2.000000
3. 乘、行列式和逆 4. 对角元的运算、单位阵与kronecker积
> A=matrix(1:6,2,3)
> B=A%*%t(A)
> B
[,1] [,2]
[1,] 35 44
[2,] 44 56
> det(B)
[1] 24
> C=solve(B)
> C
[,1] [,2]
[1,] 2.333333 -1.833333
[2,] -1.833333 1.458333
> A=matrix(1:9,3,3)
> A
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> diag(A)
[1] 1 5 9
> diag(diag(A))
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 5 0
[3,] 0 0 9
> diag(3)
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
>A=matrix(1:4,2,2)
>B=matrix(1,2,2)
> kronecker(A,B)
[,1] [,2] [,3] [,4]
[1,] 1 1 3 3
[2,] 1 1 3 3
[3,] 2 2 4 4
[4,] 2 2 4 4
5. 矩阵的特征值与特征向量(谱分解:AUUT) 6. 正定矩阵的Choleskey分解
> A=diag(3)+1
> A
正定矩阵APTP
[,1] [,2] [,3]
[1,] 2 1 1
其中P为上三角矩阵
[2,] 1 2 1
> A=diag(2)+1
[3,] 1 1 2
> A
>A.e= eigen(A)
[,1] [,2]
>A.e
[1,] 2 1
$values
[2,] 1 2
[1] 4 1 1
$vectors > A.c=chol(A)
[,1] [,2] [,3]
> A.c
[1,] -0.5773503 0.8164966 0.0000000
[,1] [,2]
[2,] -0.5773503 -0.4082483 -0.7071068
[1,] 1.414214 0.7071068
[3,] -0.5773503 -0.4082483 0.7071068
> A.e$vectors%*%diag(A.e$values)%*%t(A.e$vectors)
[2,] 0.000000 1.2247449
> t(A.c)%*%A.c
[,1] [,2] [,3]
[1,] 2 1 1 [,1] [,2]
[2,] 1 2 1
[1,] 2 1
[3,] 1 1 2
[2,] 1 2
7. 矩阵的奇异值分解AUDVT,其中UUVVI
TT
> A=matrix(1:6,2,3)
> A
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> A.s=svd(A)
> A.s
$d
[1] 9.5255181 0.5143006
$u
[,1] [,2]
[1,] -0.6196295 -0.7848945
[2,] -0.7848945 0.6196295
$v
[,1] [,2]
[1,] -0.2298477 0.8834610
[2,] -0.5247448 0.2407825
[3,] -0.8196419 -0.4018960
> A.s$u%*%diag(A.s$d)%*%t(A.s$v)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> B=cbind(1:3,1:3)
> B
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 3 3
> B.s=svd(B)
> B.s
$d
[1] 5.291503e+00 2.943727e-16
$u
[,1] [,2]
[1,] -0.2672612 0.9487015
[2,] -0.5345225 -0.2918172
[3,] -0.8017837 -0.1216890
$v
[,1] [,2]
[1,] -0.7071068 0.7071068
[2,] -0.7071068 -0.7071068
> B.s$u%*%diag(B.s$d)%*%t(B.s$v)
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 3 3
>
T8. 矩阵的QR分解A=QQ,其中QQQQTI,R为上三角阵
>Q=qr.Q(A.q)
>Q
[,1] [,2]
[1,] -0.4472136 -0.8944272
[2,] -0.8944272 0.4472136
>R= qr.R(A.q)
>R
[,1] [,2] [,3]
[1,] -2.236068 -4.9193496 -7.602631
[2,] 0.000000 -0.8944272 -1.788854
> t(Q)%*%Q
[,1] [,2]
[1,] 1.000000e+00 -1.260385e-17
[2,] -1.260385e-17 1.000000e+00
> Q%*%R
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6>
> A=matrix(1:6,2,3)
> A
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> A.q=qr(A)
> A.q
$qr
[,1] [,2] [,3]
[1,] -2.2360680 -4.9193496 -7.602631
[2,] 0.8944272 -0.8944272 -1.788854
$rank
[1] 2
$qraux
[1] 1.4472136 0.8944272 1.7888544
$pivot
[1] 1 2 3
attr(,\"class\")
[1] \"qr\"
9. 矩阵的下标下标运算
A[1,3]=4表示将A的第一行第三列的元素改成4,A[1,]表示A的第一行,A[,3]表示A的第三列,A[,c(1,3)]表示A的第一、三两列
八、数据框的构造
R的数据框就是通常的数据库,可用()来构造。数据框可以看成是矩阵的推广,因而也有维数属性,矩阵中所有元素的类型必须相同,但数据框中只要求同一列中的数
据类型必须相同,对不同列的数据类型可以不同。数据框中变量的引用方法是:数据框名$变量名,但在执行命令attach(数据框名)后,就可直接引用数据框中的变量了,命令detach(数据框名)则取消直接引用。通过names( )函数可查询和更改数据框中的变量名。
> fruit= c(\"apple\",\'orange\',\'pear\')
> price=c(5,4,8)
> x=(fruit,price)
> x
fruit price
1 apple 5
2 orange 4
3 pear 8
> x[3,]
Fruit price
3 pear 8
> x[,2]
[1] 5 4 8
> x[1,1]
[1] apple
> x$price
[1] 5 4 8
> rm(fruit,price)
> attach(x)
> price
[1] 5 4 8
> detach(x); price
>错误: 找不到这个对象\"price\"
> names(x)
[1] \"fruit\" \"price\"
> names(x)=c(\'f\',\'p\')
> x
f p
1 apple 5
2 orange 4
3 pear 8
九、列表的构造
R的列表是数据框的推广,但对其中包含的对象没有什么限制,列表可通过list()来构造。通过下标引用列表中变量的方法不同于数据框,但其它引用方法与数据框相同。
> fruit= c(\"apple\",\'orange\',\'pear\')
> price=c(5,4,8)
> y=list(fruit=fruit,price=price)
> y
$fruit
[1] \"apple\" \"orange\" \"pear\"
$price
[1] 5 4 8
> y[[1]]
[1] \"apple\" \"orange\" \"pear\"
> x[[2]][3]
[1] 8
> y$price
[1] 5 4 8
> y$fruit[1]
[1]\"apple\"
> names(y)=c(\'f\',\'p\')
> attach(y)
> p
[1] 5 4 8
> detach(y)
>z=list(x=x,y=y)
>z
$x
Fruit price
1 apple 5
2 orange 4
3 pear 8
$y
$y$fruit
[1]\"apple\" \"orange\" \"pear\"
$y$price
[1] 5 4 8
九、因子向量的构造
因子向量不仅包括分类变量本身,而且还包括变量不同的可能水平。在数据框中的分类变量就是因子向量。此外因子也可通过函数factor( )来构造。gl(n, k)函数能生成一个n个水平每个水平重复k次的因子向量。Levels( )函数可用来提取因子向量中的水平。
> fruit= c(\"apple\",\'orange\',\'pear\')
> fruit
[1] \"apple\" \"orange\" \"pear\"
> factor(fruit)
[1] apple orange pear
Levels: apple orange pear
> factor(fruit,labels=c(\'1\',\'2\',\'3\'))
[1] 1 2 3
Levels: 1 2 3
> factor(c(1,2,3,1,3,2))
[1] 1 2 3 1 3 2
Levels: 1 2 3
>factor(c(1,2,3,1,3,2),labels=c(\'A\',\'B\',\'C\'))
[1] A B C A C B
Levels: A B C
> gl(2,4)
[1] 1 1 1 1 2 2 2 2
Levels: 1 2
十、时间序列的构造
ts( )函数可以将一个向量转化为一元时间序列,或将一个矩阵转化为多元时间序列。
> ts(1:6,star=1990)
Time Series:
Start = 1990
End = 1995
Frequency = 1
[1] 1 2 3 4 5 6
> ts(1:8,frequency=4,start=c(2005,1))
Qtr1 Qtr2 Qtr3 Qtr4
2005 1 2 3 4
2006 5 6 7 8
> ts(matrix(1:6,3,2),frequency=12,star=c(2005,1))
Series 1 Series 2
Jan 2005 1 4
Feb 2005
2 5
Mar 2005
3 6
十一、表达式的构造
表达式是R能够解释的字符序列,所有有效的命令都是表达式。当一个命令被输入后,它将被R求值,如果是有效的则会被被执行。但在很多情况下,需要构造一个不被求值的表达式。在R中可用expression( )来创建一个不被求值的表达式,还可用eval( )来对创建的表达式求值。表达式可用于在图表中添加公式。一些函数把表达式当参数。
> x=3;y=2.5;z=1
> x/(y+exp(z))
[1] 0.5749019
> exp1=expression(x/(y+exp(z)))
> exp1
expression(x/(y + exp(z)))
> eval(exp1)
[1] 0.5749019
> D(exp1,\'x\')
1/(y + exp(z))
> D(exp1,\'y\')
-(x/(y + exp(z))^2)
> D(exp1,\'z\')
-(x * exp(z)/(y + exp(z))^2)
十二、用文件中的数据建立数据对象
在用R进行统计分析时,如果用于分析的数据数量较大,那么用以上方法来建立数据对象显然并不方便。大量数据一般用其它软件来管理和编辑,再读到R中处理。R提供了多种读数据文件的函数,下面介绍其中最基本的二个函数。
1.用文件中的数据建立数据框
( )函数从数据文件中读取数据建立数据框,( )函数的一般用法为
(file, header=F, nrows=-1, skip=0)
其中:file规定要读取的数据文件的文件名(包在\"\"内),如果要读取的数据文件不在当前目
录中,文件名前可带目录路径。通过菜单命令“文件/改变当前目录”可改变当前
目录。( )函数对数据文件中数据排列的方式有特殊的要求:数据文件的
第一行可以是数据集的变量名,随后的每一行为数据集的一条记录。
header表示数据文件的第一行是否是变量名的逻辑值,逻辑真为是,逻辑假为不是,
缺省为F,表示第一行不是变量名。
nrows表示读取的最大行数,缺省表示没有限制。
skip表示在读取数据前跳过的行数,缺省表示从头开始读起。
(1)从文本文件中读取数据
( )函数直接从磁盘中读取存贮在文本文件中的数据。当然文件中数据排列的方式要满足( )函数的要求:文件的第一行可以是变量名,其后每一行是一条记录。
文件保存在当前目录中,内容有
h w sex
160 50 f
180 82 m
172 73 m
165 64 f
157 57 f
151 60 f
168 57 m
>dat1=(\"\", header=T); dat1
h w sex
1 160 50 f
2 180 82 m
3 172 73 m
4 165 64 f
5 157 57 f
6 151 60 f
7 168 57 m
(2)从剪切板中读取数据
目前从方便数据管理和编辑的角度来讲,最好的软件应该是微软的Excel。R与Excel之间的数据交换非常简单,具体过程如下
a. 在Excel工作簿中选定所需的数据块,并将其拷贝到剪切板上。
b. 通过R的命令dat=(\"clipboard\", header=F)将剪切板上的数据读入数据集dat。
以上方法不仅能实现R与Excel之间的数据交换,也能用于其它软件与R之间的数据交换,只要数据排列的方式满足( )函数对数据文件的要求。
2.用文件中的数据建立向量和列表
scan( )函数从数据文件中读取数据建立向量或列表,scan( )函数的一般用法为
scan(file=\"\",what=double(0),nmax=-1,n=-1,skip=0, nlines=0)
其中:file规定要读取的数据文件的文件名(包在\"\"内),如果要读取的数据文件不在当前目
录中,文件名前可带目录路径。通过菜单命令“文件/改变当前目录”可改变当前
目录。用scan( )函数建立向量时,数据文件中的数据都是同一个变量的观测值;
用scan( )函数建立列表时,对数据文件中数据排列方式的要求与( )函数
相同。文件名缺省时表示从键盘输入数据。
what规定数据类型,缺省为数值型。what=list( )用于建立列表。
nmax表示读取数据的最大数量,what=list( )时表示读取数据的最大行数,缺省
表示没有限制。
n表示读取数据的最大数量, 缺省表示没有限制。
skip表示在读取数据前跳过的行数,缺省表示从头开始读起。
nlines表示读取数据的行数,缺省表示全部。
(1)从文本文件中读取数据
scan( )函数直接从磁盘中读取存贮在文本文件中的数据。当然文件中数据排列的方式要满足( )函数的要求:文件的第一行可以是变量名,其后每一行是一条记录。
文件保存在
当前目录中,内容有
h w sex
160 50 f
180 82 m
172 73 m
165 64 f
151 60 f
文件保存在
当前目录中,内容有
12 14 23 41 34 26 13 76
23 45 65 87 56 43 56 67
23 56 32 32 53 53 66 32
12 34 32 11 23 54 32 44
>dat2=scan(\"\",what=list(h=0,w=0,sex=\"\"),skip=1); dat2
Read 5 records
$h
[1] 160 180 172 165 151
$w
[1] 50 82 73 64 60
$sex
[1] \"f\" \"m\" \"m\" \"f\" \"f\"
> dat3=scan(\"\")
Read 32 items
> dat3
[1] 12 14 23 41 34 26 13 76 23 45 65 87 56 43 56 67 23 56 32
[25] 32 53 53 66 3212 34 32 11 23 54 32 44
(2)从剪切板中读取数据
与( )函数相似,在scan( )函数中若文件名指定为\"clipboard\",则表示从剪切板上读入数据。当然剪切板上的数据是来源于其它软件,且数据排列方式要符合scan( )函数的要求。
十三、使用R程序包提供的数据集
R的内置程序包datasets提供了大量的数据集,对内置程序包datasets中的数据集,可直接使用,不需要事先读入。另外很多附加程序包也带有自己的数据集,附加程序包中的数据集在使用前要通过data( )函数读入到活动内存中。data( )函数的使用格式为
data(..., package = NULL)
其中:...指定要读入的数据集名,数据集名可以不用包在\"\"中。
package指定一个字符型向量,表示数据集所在程序包名。若数据集所在的程序包
已加载,则这个参数项可缺省。
例如,data(Danish, package=\"evir\")表示读入程序包evir中的数据集Danish,但若程序包evir已加载,只需用data(Danish)命令。不带参数的data( )函数的功能是列示所有已加载程序包中数据集的名称,若没有加载任何附加程序包,则只列示内置程序包datasets中数据集的名称。使用命令data(package = .packages(ble = TRUE))可列示所有已安装程序包中数据集的名称。
十四、将数据对象中的内容输出到数据文件中
在应用中,经常需要将R的数据对象或计算结果保存到文件中,以备使用。R中有多个函数能实现这方面的功能,下面介绍其中常用的几个。
1.( )函数
本函数可将数据框中的数据保存到到文本文件中。使用格式为
(x, file = \"\", append = F,quote = T,
=T )
其中:x指定要写到文件中的数据框。
file规定数据要写入的文本文件的文件名(包在\"\"内),如果不将数据文件保存在当
前目录中,文件名前可带目录路径。缺省表示输出到R的控制台。
append指定一个逻辑值,逻辑真表示将数据添加在一个已存在的文件后。缺省为逻
辑假,表示将数据写入一个新的文件中,如果在目录中已存在同名文件,则这个
同名文件将被取代。
quote 指定一个逻辑值,逻辑真(缺省)表示数据框中字符型变量和因子在写入的
文件中将包在\"\"内。
指定一个逻辑值,逻辑真(缺省)表示在输出的数据中带行标识。
> fruit= c(\"apple\",\'orange\',\'pear\')
> price=c(5,4,8)
> x=(fruit,price)
> x
fruit price
1 apple 5
2 orange 4
3 pear 8
> (x,\'\')
> (x)
\"fruit\" \"price\"
\"1\" \"apple\" 5
\"2\" \"orange\" 4
\"3\" \"pear\" 8
> (x,quote=F,=F)
fuit price
apple 5
orange 4
pear 8
2.write ( )函数
本函数可将向量和矩阵中的数据保存到到文本文件中。使用格式为
write(x, file = \"data\", append = FALSE)
其中:x指定要写到文件中的向量和矩阵。
file指定数据要写入的文本文件的文件名(包在\"\"内),如果不将数据文件保存在当
前目录中,文件名前可带目录路径。缺省表示输出到当前目录中文件名为data
(无扩展名)的文件中。
append指定一个逻辑值,逻辑真表示将数据添加在一个已存在的文件后。缺省为逻
辑假,表示将数据写入一个新的文件中,如果在目录中已存在同名文件,则这个
同名文件将被取代。
3.save ( )函数和load( )函数
save( )和( )函数可将R工作空间中的对象保存到R的工作空间文件中,此类文件的扩展名为RData,R的工作空间文件可用load( )函数读入到R的工作空间中。这三个函数的使用格式为
save(...,list=character(0),
file=stop(\"\'file\' must be specified\"), ascii = F)
(file = \".RData\",ascii = F)
其中:...指定要保存的对象名称。
list字符型向量,指定要保存的对象名称。
file 指定数据要写入的工作空间文件的文件名,关键词file必须出现。
ascii 指定一个逻辑值,逻辑真表示保存的文件是ASCII码文件,缺省为逻辑假。
( )函数保存活动内存中的全部对象,等价于save(list=ls(all=T))。
load(file)
其中:file 为要载入的R的工作空间文件的文件名。
例如save(x, y, z, file=\"\"),load(\"\"),()
十五、随机变量分布的函数
R中关于分布的函数的函数名由二部分组成,第一部分是函数名的第一个字母,代表函数所属的组,第二部分由函数名的剩余的字母组成,代表函数所属的分布。R中关于分布的函数的函数组分成四组
(1) 概率函数或密度函数(d)
(2) 分布函数(p)
(3) 分位数函数(q)
(4) 产生随机数函数(r)
常用随机变量分布的R名字如下表所示。比如函数rnorm( 20)生成由20标准正态分布随机数组成的向量,函数rnorm(50,2,5)生成由50 个均值是5,标准差是5的正态分布随机数组成的向量。其它函数的具体用法可见R的帮助。
常用随机变量分布的R名字
分 布
正态分布
指数分布
对数正态分布
logistic分布
几何分布
泊松分布
N中的名称
norm
exp
lnorm
logis
geom
pois
分 布
t分布
f分布
2分布
均匀分布
二项分布
负二项分布
R中的名称
t
f
chisq
unif
binom
nbinom
分 布
beta分布
weibull分布gamma分布
cauchy分布
超几何分布
R中的名称
beta
weibull
gamma
cauchy
hyper
十六、自定义函数
R并没有提供所有的函数,有些函数要用户自已定义。R的函数function( )使用户能编写自已的函数。例如,R中没有计算样本几何平均数
1nn
Glogx(i)nni1
xiei11的函数,通过以下方法可定义一个计算样本几何平均数的R函数( )
> =function(x)
{ n=length(x)
gm=exp(mean(log(x)))
return(gm)
}
> x=1:5
> (x)
[1] 2.605171
更多推荐
数据,函数,向量
发布评论