R语言常见命令.docx
《R语言常见命令.docx》由会员分享,可在线阅读,更多相关《R语言常见命令.docx(37页珍藏版)》请在冰豆网上搜索。
R语言常见命令
1.获取帮助
>help.start()开启帮助文档
>help(solve)显示某命令的帮助信息,或者
>?
solve
对于由特殊字符指定的功能,这些参数必须用单引号或双引号括起来,使之成为一个“字符串”,如
>help("[[")
与某个主题相关的例子通常可以用下面的命令得到
> example(topic)
2.命令简介
R对大小写是敏感的;名称不能以数字开始;
基本的命令由表达式或者赋值语句组成。
如果一个表达式被作为一条命令给出,它将被求值、打印而表达式的值并不被保存。
一个赋值语句同样对表达式求值之后把表达式的值传给一个变量,不过并不会自动的被打印出来;
命令由分号(;)来分隔,或者另起新行;
基本命令可以由花括号(f和g)合并为一组复合表达式;
注释几乎可以被放在任何地方,只要是以井号(#)开始,到行末结束;
如果一个命令在行莫仍没有结束,R将会给出一个不同的提示符,默认的是‘+’。
3.命令文件的执行和输出转向到文件
如果命令存储于一个外部文件中,比如工作目录work中的commands.R,他们可以随时在R的任务中被执行
> source("commands.R")在Windows中Source也可以由File菜单执行。
函数sink,
> sink("record.lis")
将把所有后续的输出由终端转向一个外部文件,record.lis。
命令
>sink() 将把信息重新恢复到终端上。
4.数据的保持与对象的清除
R所创建、操作的实体是对象。
对象可以是变量、数组、字符串、函数以及由这些元素组成的其它结构;
> objects() 用来显示目前存储在R中的对象的名字。
而当前存储的所有对象的组合被称为workspace;
清除对象可以使用rm命令:
> rm(x,y,z,ink,junk,temp,foo,bar)
所有在一个R任务中被创建的对象都可以在文件中被永久保存,并在其它的R任务中被使用。
在每个R任务结束时用户都有机会保存当前有效的所有对象。
如果用户这样做的话,对象将被写入当前目录一个名为.RData。
当R被再次启动时R会从这个文件中再载入workspace。
同时相关的命令记录也被载入。
所以,推荐大家在用R进行不同的分析时分别使用不同的工作目录。
5.基本数据结构
数值型(numeric)
1,1.2,3.1415926
复数型(complex)
1+2i
字符型(character)
‘A’/“helloworld!
”
逻辑型(logical)
TRUE/FALSE
6.基本数据对象
向量(vector),见下节
矩阵(matrix):
更一般的说数组是向量在多维情况下的一般形式。
事实上它们是可以被两个或更多的指标索引的向量,并且以特定的方式被打印出来。
因子(factors) 提供了一种处理分类数据的更简介的方式。
列表(list):
是向量的一种一般形式,并不需要保证其中的元素都是相同的类型,而且其中的元素经常是向量和列表本身。
数据框(dataframe):
是一种与矩阵相似的结构,其中的列可以是不同的数据类型。
可以把数据框看作一种数据"矩阵",它的每行是一个观测单位,而且(可能)同时包含数值型和分类的变量。
函数(function):
能够在R的workspace中存储的对象。
我们可以通过函数来扩展R的功能。
二 简单操作,数值与向量
2.1向量与赋值
R对命名了的数据结构进行操作。
最简单的数据结构是数字向量;如,
>x<-c(10.4,5.6,3.1,6.4,21.7) c()是创建函数,赋值运算符是'<-',与函数assign()等价
> assign("x",c(10.4,5.6,3.1,6.4,21.7)) 也可以写成:
> c(10.4,5.6,3.1,6.4,21.7)->x
如果一个表达式被当作一个完整的命令,它的值将被打印到终端但不被储存。
单独输入x则会将值打印出来。
也可以打印倒数:
>1/x
>y<-c(x,0,x) 也可以将向量作为元素。
2.2向量运算
操作是按照向量中的元素一个一个进行的。
同一个表达式中的向量并不需要具有相同的长度。
如果它们的长度不同,表达式的结果是一个与表达式中最长向量有相同长度的向量。
表达式中较短的向量会根据它的长度被重复使用若干次(不一定是整数次),直到与长度最长的向量相匹配。
而常数很明显的将被不断重复。
如,
>v<-2*x+y+1
常用运算有:
+,-,*,/,^(次方);
log,exp,sin,cos,tan,sqrt等;
max和min的作用是选出所给向量中最大的或最小的元素;
range函数的值是一个长度为2的向量,即c(min(x),max(x))
length(x)返回了向量x中元素的个数,也就是x的长度。
sum(x)给出了x中所有元素的总和;
prod(x)给出x中所有元素的乘积;
mean(x)和var(x),分别计算样本均值和样本方差,这两个函数分别相当于sum(x)/length(x),sum((x-mean(x))^2)/(length(x)-1)。
如果var()的参数是一个n*p的矩阵,那么函数的值是一个p*p的样本协方差矩阵,认为每行是一个p变量的样本向量。
sort(x)返回一个与x具有相同长度的向量,其中的元素按招升序排列。
还有其他更灵活的排序功能(参见order()和sort.list())。
pmax和pmin将返回一个与最长的向量长度相等的向量,向量中的元素由参数中所有向量在相应位置的最大值(最小值)组成;
如果要使用复数,需要直接给出一个复数部分。
因此sqrt(-17)将会返回NaN(无效数值)和一个警告,而sqrt(-17+0i)将按照复数进行运算。
2.3生成序列
最简单的方法是用冒号‘:
’,冒号具有最高运算优先级。
例如1:
30就是向量c(1,2,...,29,30)。
30:
1构造一个递减序列。
利用seq()函数构造序列:
有五个参数,from,to,by,length,along
from,to可以不写参数名,seq(2,10)就相当于2:
10。
by指定步长,默认为1,如seq(-5,5,by=.2)即为c(-5.0,-4.8,-4.6,...,4.6,4.8,5.0)
length指定序列长度,如seq(length=51,from=-5,by=.2),等同于seq(-5,5,by=.2)
along=vector只能单独使用,产生一个“1:
length(vector)”序列。
类似的函数是rep(),这个函数可以用多种复杂的方法来
复制一个对象。
最简单的形式是>s5<-rep(x,times=5)
2.4逻辑向量
TRUE, FALSE,和NA(notavailable),前两个可以简写为T和F,但T/F并不是系统保留字,可以被用户覆盖,所以最好还是不要简写。
逻辑向量是由条件给出的,如下列语句令temp成为一个与x长度相同,相应位置根据是否与条件相符而由TRUE或FALSE组成的向量:
>temp<-x>13
逻辑操作符包括<,<=,>,>=,完全相等==和不等于!
=,与或非分别为&,|,!
。
在普通运算中,FALSE当做0而TRUE当做1。
2.5缺失值
NA(notavailable):
一般来讲一个NA的任何操作都将返回NA。
is.na(x)返回一个与x等长的逻辑向量,并且由相应位置的元素是否是NA来决定这个逻辑向量相应位置的元素是TRUE还是FALSE。
x==NA是一个与x具有相同长度而其所有元素都是NA的向量。
NaN(NotaNumber):
由数值运算产生,如0/0,Inf-Inf.
is.na(x)对于NA和NaN值都返回TRUE,
is.nan(x)只对NaN值返回TRUE。
2.6字符向量
字符串在输入时可以使用单引号(')或双以号("); 在打印时用双引号(有时不用引号)。
R使用与C语言风格基本相同的转义符,所以输入\打印的也是\,输入"打印引号", n:
换行,t:
tab,b:
回格。
字符向量可以通过函数c()连接;
paste()可以接受任意个参数,并从它们中逐个取出字符并连成字符串,形成的字符串的个数与参数中最长字符串的长度相同。
如果参数中包含数字的话,数字将被强制转化为字符串。
在默认情况下,参数中的各字符串是被一个空格分隔的,不过通过参数sep=string用户可以把它更改为其他字符串,包括空字符串。
例如:
>labs<-paste(c("X","Y"),1:
10,sep="") 使变量labs成为字符变量c("X1","Y2","X3","Y4","X5","Y6","X7","Y8","X9","Y10")
2.7indexvector---数据集子集的选择与修改
任何结果为一个向量的表达式都可以通过追加索引向量(indexvector)来选择其中的子集。
1逻辑的向量。
>y<-x[!
is.na(x)] 表示将向量x中的非NA元素赋给y;
>(x+1)[(!
is.na(x))&x>0]->z 表示创建一个对象z,其中的元素由向量x+1中与x中的非缺失值和正数对应的向量组成。
2.正整数的向量
>x[6] 是x的第六个元素
>x[1:
10] 选取了x的前10个元素(假设x的长度不小于10)。
>c("x","y")[rep(c(1,2,2,1),times=4)] 产生了一个字符向量,长度为16,由"x","y","y","x"重复4次而组成。
3.负整数的向量
>y<-x[-(1:
5)] 表示向量y取向量x前5个元素以外的元素。
4.字符串的向量
只存在于拥有names属性并由它来区分向量中元素的向量。
这种情况下一个由名称组成的子向量起到了和正整数的索引向量相同的效果。
>fruit<-c(5,10,1,20)
>names(fruit)<-c("orange","banana","apple","peach")
>lunch<-fruit[c("apple","orange")]
子集的修改
>x[is.na(x)]<-0 表示将向量x中所以NA元素用0来代替
>y[y<0]<--y[y<0] 表示将向量(-y)中与向量y的负元素对应位置的元素赋值给向量y中与向量y负元素对应的元素。
作用相当于:
>y<-abs(y)
三 对象,模式和属性
3.1固有属性:
模式和长度
对象是R所进行操作的实体,对象可以是向量、列表等,详见1.6.
对象的模式包括numeri,ccomplex,character,logical,list,function,expression等。
可以用mode(object)查看。
对象的长度是对象的另一固有属性。
可以用length(object)查看。
attribute(object)可以查看更深入的属性。
模式的转换
在允许的情况下(大多数情况都是允许的),R可以完成各种模式的转换。
例如:
d<-as.character(z),将数值向量z<-(0:
9)转化为字符向量c("0","1","2",...,"9")。
as.integer(d)将d转化为数值向量。
R中很多形式为as.something()的函数,可以完成从一个模式向另一个模式的转化,或者是令对象取得它当前模式不具有的某些属性。
3.2改变对象的长度
>e<- numeric() 产生一个numeric型的空向量e。
character()等类似。
此时长度为对象0。
此时新添加一个元素会使e的长度自动调整。
>e[3]<-17 令e为一个长度为3的向量(此时,该向量的前两个元素都是NA)
缩短(截断)一个对象的长度,只需要一个赋值命令。
因此,若alpha是一个长度为10的对象,下面的命令
>alpha<-alpha[2*1:
5]
3.3属性的获取和设置
函数attributes(object)将给出当前对象所具有的所有非基本属性(长度和模式属于基本属性)的一个列表。
函数attr(object,name)可以被用来选取一个指定的属性。
除了为某些特殊的目的创建新属性这样特殊的环境下,这些函数很少被用到。
当函数attr()用在赋值语句左侧时,既可以是将对象与一种新的属性关联,也可以是对原有属性的更改。
例如
>attr(z,"dim")<-c(10,10) 另R将z作为一个10X10的矩阵看待。
3.4对象的类别
对象的一个特别属性,类别,被用来指定对象在R编程中的风格。
比如:
如果对象类别"data.frame"则会以特定方式处理。
unclass()可以去除对象的类别。
summary()可以查看对象的基本信息(min,max,mean,etc.)
四 有序因子和无序因子
因子是一种向量对象,它给自己的组件指定了一个离散的分类(分组),它的组件由其他等长的向量组成。
R提供了有序因子和无序因子。
通俗点说,因子就是将对象的值分成不同的组(levels)。
用函数factor()创建一个因子,levels按序排列(字母序或数值序)。
例如province<-c("四川","湖南","江苏","四川","四川","四川","湖南","江苏","湖南","江苏"),为province创建因子:
> pf<-factor(province) 创建province的因子pf
>pf 打印出来
[1]四川湖南江苏四川四川四川湖南江苏湖南江苏
Levels:
湖南江苏四川
函数levels()可以用来观察因子中有多少不同的levels。
假如我们拥有这些省份考生的分数:
>score<-c(95,86,84,92,84,79,86,99,85,90)
函数tappley()可以用来计算各省的平均分数,函数tapply()的作用是对它第一个参数的组件中所包含的每个组应用一个参数三指定的函数。
>smeans<-tapply(score,pf,mean)
>smeans
湖南 江苏 四川
85.6666791.0000087.50000
再例如,下面命令会给出各组的length
>tapply(score,pf,length)
湖南江苏四川
3 3 4
函数ordered()可以创建有序因子
>ordered(province)
[1]四川湖南江苏四川四川四川湖南江苏湖南江苏
Levels:
湖南<江苏<四川
五数组和矩阵
5.1数组
数组可以看成一个由递增下标表示的数据项的集合,例如数值。
数组的生成
如果一个向量需要在R中以数组的方式被处理,则必须含有一个维数向量作为它的dim属性。
维度向量由dim()指定,例如,z是一个由1500个元素组成的向量。
下面的赋值语句
>dim(z)<-c(3,5,100) 使它具有dim属性,并且将被当作一个3X5X100的数组进行处理。
c(3,5,100)就是他的维度向量。
还可以用到像matrix()和array()这样的函数来赋值。
比如
> array(1:
20,dim=c(4,5))
>matrix(1:
24,3,4)
数据向量中的值被赋给数组中的值时,将遵循与FORTRAN相同的原则"主列顺序",即第一个下标变化的最快,最后的下标变化最慢。
数组的运算
数组可以在算数表达式中使用,结果也是一个数组,这个数组由数据向量逐个元素的运算后组成,通常参与运算的对象应当具有相同的dim属性。
5.2数组的索引和数组的子块
数组中的单个元素可以通过下标来指定,下标由逗号分隔,写在括号内。
我们可以通过在下标的位置给出一个索引向量来指定一个数组的子块,不过如果在任何一个索引位置上给出空的索引向量,则相当于选取了这个下标的全部范围。
如a[2,,],a[,3,]等
5.3索引数组
除了索引向量,还可以使用索引数组来指定数组的某些元素。
例如:
有4X5的数组a,若要得到a中的a[1,3],a[2,2]和a[3,1]这三个元素,可以生成索引向量i,然后用a[i]得到它们。
> a<-array(1:
20,dim=c(4,5))#Generatea4by5array.
>i<-array(c(1:
3,3:
1),dim=c(3,2))
>i
[,1][,2]
[1,]13
[2,]22
[3,]31
>a[i]
[1]963
>a[i]<-0 #将这三个元素用0替换。
5.4向量,数组的混合运算
表达式从左到右被扫描;
参与运算的任意对象如果大小不足,都将被重复使用直到与其他参与运算的对象等长;
当较短的向量和数组在运算中相遇时,所有的数组必须具有相同的dim属性,否则返回一个错误;
如果有任意参与运算的向量比参与运算的矩阵或数组长,将会产生错误;
如果数组结构正常声称,并且没有错误或者强制转换被应用于向量上,那么得到的结果与参与运算的数组具有相同的dim属性。
5.5矩阵的运算
构建分区矩阵:
cbind()和rbind(),cbind()按照水平方向,或者说按列的方式将矩阵连接到一起。
rbind()按照垂直的方向,或者说按行的方式将矩阵连接到一起。
外积:
操作符是%o%:
>ab<-a%o%b 或者
>ab<- outer(a,b,"*")
其中的乘法操作可以由任意一个双变量的函数替代。
广义转置:
函数t(A),或aperm(A,c(2,1));
获取行数/列数:
nrow(A)和ncol(A)分别返回矩阵A的行数和列数。
矩阵乘法:
操作符为%*%;
交叉乘积(crossproduct):
crossprod(X,Y)等同于t(X)%*%y,crossprod(X)等价于crossprod(X,X);
diag(v):
如果v是向量,diag(v)返回一个由v的元素为对角元素的对角矩阵。
如果v为矩阵,diag(v)返回一个由v主对角元素组成的向量。
如果v只是一个数值,那么diag(v)是一个vXv的单位矩阵。
特征值和特征向量:
eigen(Sm)。
这个函数的结果是由名为values和vectors的两部分组成的列表。
如果只是需要特征值:
eigen(Sm)$values
最小二乘拟合即QR分解:
lsfit(),qr()。
强制转换为向量:
as.vector(),或者直接c().
解线性方程和求矩阵的逆,奇异值分解与行列式见;
六 列表和数据帧
6.1列表
列表是由称作组件的有序对象集合构成的对象。
组件的模式或类型不一定相同。
形如Lst<- list(name_1=object_1,...,name_m=object_m)的赋值将创建一个包含m个组件的列表,并根据参数中指定的名称为其命名。
(其名称可以自由选取)。
如果它们的名称被省略,组件将只是被编号。
例如:
>Lst<- list(name="Fred",wife="Mary",no.children=3,child.ages=c(4,7,9))
所使用的组件是被复制到新的列表中的,对原始对象没有影响。
组件总是被编号的,并且可以通过编号指定。
Lst[[1]] 即为"Fred",也可以用 Lst$name,Lst[["name"]]指定。
如果Lst[[4]]是一个有下标的数组,Lst[[4]][1]就是它的第一项。
区分Lst[[1]]和Lst[1],'[[...]]'是选择单个元素时使用的操作符,而'[...]'是一个一般的下标操作符。
因此,前者代表列表Lst中的第一个对象;后者是列表Lst的子列表,仅包含列表的第一项。
组件的名称可以缩写,可缩写的程度是只要能令组件被唯一的识别就可以了。
如:
Lst$na等价于Lst$name,Lst$w等价于Lst$wife。
扩展列表
可以通过指定额外组件的方式。
例如
>Lst[5]<-list(matrix=Mat)
连接列表
当连接函数c()的参数为列表时,其结果也是一个模式为列表的对象。
由参数中的列表作为组件依次连接而成。
>list.ABC<-c(list.A,list.B,list.C)
6.2数据帧
数据帧是类别为"data.frame"的列表;
数据帧会被当作各列具有不同模式和属性的矩阵。
数据帧按照矩阵的方式显示,选取的行或列也按照矩阵的方式来索引。
创建数据帧
直接创建:
那些满足对数据帧的列(组件)限制的对象可以通过函数data.frame来构建成为一个数据帧
>t<-data.frame(home=statef,loot=income,shot=incomef)
强制转换:
如果一个列表的组件与数据帧的限制一致,这个列表就可以通过函数as.data.frame()强制转化为一个数据帧。
外部文件:
创建数据帧最简单的方法应当是使用read.table()函数从外部文件中读取整个数据帧。
数据帧和列表的限制
1组件必须是向量(数值型,字符形,逻辑型),因子,数值矩阵,列表,或其他数据帧;
2矩阵,列表,数据帧向新数据帧提供的变量数分别等于它们的列数,元素数和变量数;
3数值向量,逻辑值和因子在数据帧中保持不变,字符向量将被强制转化为因子,其水平是字符向量中所出现的值;
4数据帧中作为变量的向量结构必须具有相同的长度,而矩阵结构应当具有相同的行大小。
挂接和卸载数据帧
当觉得使用'$'引用数据帧元素(如't$home')麻烦时,可以进行数据帧挂接
> attach(t) 这样可以直接引用数据帧内的元素,而无需'$',前提是数据帧外没有同名的变量(如name)。
挂接后若要对数据帧元素进行赋值操作,仍需用'$',否则视为赋值给数据帧外的元素。
赋值后必须要先卸载(detach)