保留字是R语言中被赋予特定意义的一些单词。在编写代码时,不可以把这些保留字作为变量、函数、类、模块和其他对象的名称来使用。R语言中的常用保留字如表3.1所示。
表3.1 R语言中常用的保留字
表3.1中有几个比较特殊的保留字,是数据处理过程中经常遇到的保留字。
(1)NA:表示缺失值,是Not Available的缩写。
(2)Inf:表示无穷大,是Infinite的缩写。
(3)NaN:表示非数值,即不是一个数,是Not a Number的缩写。
(4)NULL:表示空值。
程序运行过程中,其值可以发生改变的量称为“变量”。每个变量都有一个用于标识自己的名字,如a。在R语言中,不需要先声明变量名及其类型,直接赋值即可创建各种类型的变量。
变量的命名并不是任意的,应遵循以下几条规则。
(1)变量名可以包含英文字母、数字、下画线和英文句号(.)。
(2)变量名不能存在中文(新版本可以使用中文,但不建议)、空格、“-”、“$”等符号。
(3)不能以数字和下画线开头。
(4)变量名以”.”符号开头的,后面不能是数字,如果是数字会变成0.××××。
(5)变量名不能是R语言的保留字(如表3.1中常用的保留字)。
(6)谨慎使用小写字母l和大写字母O,容易与1和0混淆。
(7)应选择有意义的单词作为变量名。
为变量赋值可以通过符号“<-”来实现,最好在“<-”符号前后各空一个格。
例如,创建一个变量number,并为其赋值为1024,代码如下:
number <- 1024 # 创建变量number并赋值为1024,该变量为数值型
上述创建的变量number就是数值型的变量。
如果直接为变量赋值一个字符串,那么该变量就是字符型。代码如下:
myname <- "明日科技" # 字符型的变量
另外,R语言是一种动态类型语言,也就是说,变量的类型可以改变。例如,在RGui中创建变量myname,为其赋值"明日科技",输出变量类型会发现该变量为字符型;为其赋值1024,输出变量类型会发现该变量为数值型。代码如下:
说明
在R语言中,使用内置函数mode()可以返回变量类型。
R语言的基本数据类型包括数值型(numeric,含数字、整型、双整型)、字符型(character)、逻辑型(logical)等,如表3.2所示。例如,一个人的姓名通常使用字符型存储,年龄通常使用数值型存储,婚否则可以使用逻辑型存储。
表3.2 基本数据类型
下面对基本的数据类型进行详细介绍。
数值型又可以分为数字(numeric)、整型(integer)、双整型(double)等。其中,整型用来表示整数数值,即没有小数部分的数值。R语言中,在数字后面添加L,即声明该数字以整型方式储存。在计算机内存中,整型比双整型更加准确(除非该整数非常大或非常小)。
双整型用于储存普通数值型数据,包括正数、负数和小数。R语言中,输入的任何一个数值都默认以Double类型存储。在数据科学里,常被称为数值型(numeric)。
字符型向量用以储存一小段文本,在R语言中字符要加双引号表示。字符型向量中的单个元素被称为“字符串(string)”,字符串不仅可以包含英文字母和中文,也可以由数字或符号组成。需要注意的是一定要加上引号,如"mingrisoft"、"明日科技",不加引号会报错,单引号或双引号都可以。
逻辑型变量也就是我们常说的布尔变量(Boolean),其值为TRUE和FALSE,或者大写的T和F,需要注意的是英文字母全是大写。另外一种取值为NA缺失值(未知值),数值型和字符型也有NA。
R语言中的复数与数学中的复数完全一致,都由实部和虚部组成,使用j或J表示虚部。当表示一个复数时,可以将其实部和虚部相加。例如,一个复数的实部为3.14,虚部为12.5j,则这个复数可表示为3.14+12.5j。复数类型主要用来存储数据的原始字节。
读者可通过以下3个函数查看数据类型。
class()函数:用于查看数据类型。
mode()函数:用于查看数据大类。
typeof()函数:用于查看数据细类。
示例代码如下:
运行程序,结果如图3.2所示。从运行结果得知不同函数的返回结果略有不同。
图3.2 查看数据类型
除此之外,在程序中还可以对数据类型进行判断和转换,主要用到的函数如表3.3所示。
表3.3 数据类型的判断和转换函数
其中,is族函数用于判断数据类型,返回值为TRUE和FALSE;as族函数用于实现数据类型之间的转换。代码如下:
is.numeric("明日科技") # 判断"明日科技"是否为数值型 as.numeric("88") # 将字符串"88"转换为数值型88
运算符是一些特殊的符号,主要用于数学计算、比较大小和逻辑运算等。R语言中的运算符主要包括算术运算符、关系(比较)运算符、逻辑运算符、赋值运算符和其他运算符。在R语言中,运算符主要用于向量运算,下面介绍一些常用的运算符。
在R语言中,算术运算符主要用于向量运算,即元素与元素之间的算术运算,如表3.4所示。
表3.4 算术运算符
说明
向量是R语言中最简单、最重要的一种数据结构,由一系列同一种数据类型的有序的元素构成,类似一维数组。另外,上述代码c()函数主要用于创建向量。例如x<-c(1,2),是将1和2两个数组合成向量(1,2),并存入变量x中。有关向量更加详细的介绍可参见4.1节。
下面重点看一下R语言和其他编程语言有哪些不同。
(1)R语言中,乘方运算既可以使用“^”符号,也可以使用“**”符号。
(2)除法“/”运算与C/C++不同,在C/C++中若不能整除则向下取整;R语言与Python是一样的,均采用浮点数计算。例如,下面的代码分别为R语言和Python的除法运行结果。
R语言代码:
> 1/3 [1] 0.3333333
Python代码:
>>> 1/3 0.3333333333333333
【例3.1】 计算学生成绩的分差及平均分 (实例位置:资源包\Code\03\01)
某学生3门课程的成绩如图3.3所示,通过编程实现:
(1)Python和R语言课程的分数之差;
(2)3门课程的平均分。
运行RGui,新建程序脚本,名称为demo.R。在该文件中定义3个变量,用于存储各门课程的分数,然后应用减法运算符计算分数差,应用加法运算符和除法运算符计算平均成绩,最后输出计算结果。代码如下:
运行程序,结果如图3.4所示。
图3.3 学生成绩
图3.4 计算学生成绩的分差及平均分
代码解析
第6~7行代码中的paste()函数用于连接字符串。
在R语言中,比较运算符可对两个向量中的元素逐个进行比较,比较后的结果为布尔值。常用的比较运算符如表3.5所示。
表3.5 比较运算符
逻辑运算符可对真(TRUE)、假(FALSE)两种布尔值进行运算,即对两个向量中的元素逐个进⾏⽐较,运算后的结果仍是一个布尔值。R语言中,逻辑运算符仅适用于逻辑型、数值型或复杂类型的向量。常用的逻辑运算符如表3.6所示。
表3.6 逻辑运算符
在R语言中,赋值运算符用于为向量赋值,如表3.7所示。
表3.7 赋值运算符
以上赋值运算符,在编程过程中常用的是标准赋值运算符“<-”。
还有一些特殊的运算符,用于特定目的,而不是一般的数学运算或逻辑运算,如表3.8所示。
表3.8 其他运算符