R语言数据可视化之美:专业图表绘制指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4.5 控制语句与函数编写

我们常用的控制语句包括if…else、ifelse条件语句,以及for和while循环语句。其中我们最常见的就是if…else,主要用于检查判定。其条件最基本的检查包括等于(=)、小于(<)、小于等于(<=)、大于(>)、大于等于(>=)和不等于(! =)。if…else语句对数据的操作运算命令都需要放在{}里面。需要注意的是:else跟在其左边的大括号“}”必须在同一行,否则程序无法识别,会导致代码运行错误。另外,R语言还有一个ifelse()语句,可以向量化if语句,从而加速代码的运行,如表1-4-5所示的if…else条件语句可以使用ifelse()重写为:ifelse(i > 3, print('Yes'), print('No'))。该语句可以结合transform()函数等对数据框的每个元素进行判别运算,从而生成新的列。

表1-4-5 控制语句

我们最常用的循环是for循环,for循环的向量不一定是连续型的,也可以是其他类型的向量,如表1-4-6所示的for循环示例。其中,1:4的输出起点为1、终点为4、步长为1的等差数列向量(1,2,3,4),效果类似于seq(1,4,1)。另外,while循环虽然没有for循环用得普遍,但是更加易于操作。但对新手来说,容易由于设定的循环条件有误而导致循环不停迭代,从而陷入“死循环”。

表1-4-6 自定义函数

我们在实现数据可视化时,更多是使用现有包的函数,比如等差数列生成函数seq()、向量排序函数sort()、插值函数spline()等,而很少需要自定义函数(表1-4-6为各种自定义函数的语法格式)。我们更加需要了解的是现有函数的输入参数与数据的结构、输出参数的数据内容等,比如plot3D包的persp3D()函数和lattice包的wireframe()函数都可以绘制相同的三维曲面图,但是persp3D()函数要求输入的数据是向量与矩阵形式,而wireframe()函数要求输入的数据是数据框。