前言
类似其他计算机高级语言,R用户只需要熟悉其命令、语句及简单的语法规则,就可以做数据管理和分析处理工作。R把大部分常用的复杂数据计算的算法作为标准函数调用,用户仅需要指出函数名及其必要的参数即可,这一特点使得R编程十分简单。
R是面向对象的、区分大小写的解释型数组编程语言,输入后可直接给出结果。R中功能靠函数实现。R的函数分为“高级”和“低级”函数,高级函数可调用低级函数,这里的高级函数习惯上称为泛型函数。plot()就是泛型函数,可以根据数据的类型调用底层的函数,应用相应的方法绘制相应的图形。这就是面向对象编程的思想。
数据集
创建含有研究信息的数据集,这是任何数据分析的第一步。数据集通常是由数据构成的一个矩形数组,行表示观测,列表是变量。
R可以处理的数据类型包括数值型(如100)、字符型(如“流光相约”)、逻辑型(TRUE/FALSE)、复数型(如2+3i)和因子型(表示不同类别)。R中有许多用于存储数据的结构,包括标量、向量、矩阵、数组、数据框和列表。多样化数据结构赋予了R极其灵活的数据处理能力。
标量与向量
标量可以看成是只含一个元素的向量,用于保存常量,如f=3、g=’US’和h=TRUE。
向量是一系列元素的组合,用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量:
提示:单个向量中的数据必须是相同的类型或模式(数值型、字符型或逻辑型),同一向量中不可混杂不同类型数据。
通过在方括号中给定元素所处位置的数值访问向量中的元素,如a[c(2, 4)]用于访问向量a中第2个和第4个元素。
矩阵
矩阵是一个二维数组,和向量类似,其中元素必须类型相同,即一个矩阵中只能包含一种数据类型(数值型、字符型或逻辑型),可通过函数matrix()创建矩阵:
mymatrix= matrix(vector,nrow = ,ncol = ,byrow = ,dimnames = list())
其中,vector包含了矩阵的元素,nrow和ncol用于制定行和列的维数,dimnames包含了可选的、以字符型向量表示的行名和列名,byrow表明矩阵应当按行填充(byrow=T)还是按列填充(byrow=F),默认按列填充。
我们可以使用下标和方括号来选择矩阵中的行、列或元素。X[i,]表示矩阵X中的第i行,X[,j]表示第j列,X[i, j]表示第i行第j个元素。
数组
矩阵都是二维的,仅能包含一种数据类型,当维度超过2时,需要使用数组,可通过函数array()创建:
myarray= array(vector,dimensions,dimnames)
其中,vector包含了数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大值,dimnames是可选的、各维度名称标签的列表。
数组是矩阵的一个自然推广,从数组中选取元素的方式与矩阵相同。
数据框
与通常在SAS、SPSS和STATA中看到的数据集类似,不同的列可以包含不同类型的数据。数据框是R中最常处理的数据结构,可使用函数data.frame()创建:
mydata=data.frame(col1,col2,col3,...)
其中,列向量col1,col2,col3等可谓任何类型(如字符型、数值型或逻辑型)。
选取数据框中元素的方式比较多,既可以使用下标记号,也可以直接指定列名,如patientdata\(age,其中\)被用来选取一个给定数据框中的某个特定变量。
在每个变量名前都输入一次数据框名可能十分麻烦,我们可以联合使用函数attach()和detach(),或单独使用函数with()来简化代码。函数attach()将数据框添加到R的搜索路径中,R在遇到一个变量名后,将检查搜索路径中的数据框,以定位到这个变量,如
函数detach()将数据框从搜索路径中移除,不会影响数据框本身。注意:函数attach()和detach()最好是分析一个单独的数据框,并且不太可能有多个同名对象。当同名时,原始对象将进行优先运算。另一种方式是使用函数with(),如
花括号{}之间的语句都针对该数据框执行,无需担心名称冲突;若仅有一条语句,花括号可以省略。函数with()的局限性在于赋值仅在此函数的括号内有效。若需要创建在with()结构外依然存在的对象,使用特殊赋值符号 ->> ,即可保存对象到全局环境中。
列表
列表是一些对象(成分)的有序集合,允许整合若干对象到单个对象名下,其中的对象可以是任何数据结构,如某个列表可以是若干向量、矩阵、数据框甚至其他列表的组合,使用函数list()创建列表:
mylist=list(object1,object2,...)
可以通过在双重方括号中指明代表某个成分的数字或名称来访问列表中的元素,如mylist[[4]]。由于列表允许以一种简单的方式组织和重新调用可能不相干的信息,且许多R函数的运行结果都是以列表的形式返回的,由分析人员决定需要取出其中哪些成分,列表是R中的重要数据结构。