R是一门著名的可用于数据和统计分析的程序语言,本文翻译自R软件官方文档教程《An Introduction to R》,仅供学习和参考。
9 分组表达式、条件和循环语句
9.1 分组表达式
R 是一种基于表达式的语言,因为它唯一的命令语句就是能够返回结果的函数或表达式。甚至赋值也是一个表达式,这个表达式的结果就是被赋的值。这个结果也可以用在任何可以使用表达式的地方。也就是说,嵌套表达式是存在的。
表达式可以用大括号组合在一起,{expr_1; ...; expr_m}
,在这种情况下,整个表达式组的值是组中最后一个表达式的计算结果。这样的一个表达式组也是一个表达式,也就是说,它本身也可以包含在大括号中并用作更大表达式的一部分。
9.2 控制语句
9.2.1 条件执行:if语句
if
语句的基本形式为:
> if(逻辑表达式) 操作表达式1 else 操作表达式2
其中,逻辑表达式
必须计算出一个逻辑值。如果为TRUE
,执行操作表达式1
,语句的结果是操作表达式1
的结果。否则执行操作表达式2
,语句的结果是操作表达式2
的结果。
逻辑运算符 &&
(与)和 ||
(或)通常用作 if 语句中条件的一部分。值得注意的是,与之类似的&
和 |
会逐元素应用于向量,而&&
和 ||
只适用于长度为1的向量,并且只在必要时才会计算它们的第二个参数。
有一个 if/else 语句的矢量化版本,即 ifelse()
函数。它具有 ifelse(condition, a, b)
的形式,并返回一个与 condition
长度相同的向量,如果 condition[i]
为真,则结果向量的对应元素为 a[i]
,否则为 b[i]
。
9.2.2 循环语句:for、repeat和while
for
循环语句的基本形式为:
> for(变量名 in 向量表达式) 循环表达式
其中,循环表达式
常常为分组表达式,而且在循环表达式
中会使用到临时变量变量名
。for
循环会将向量表达式
结果的元素逐个赋给变量名
,然后循环执行循环表达式
。
假设ind
是一个类因子,我们希望在各类中生成单独的 y 与 x 的关系图。这里可以使用 coplot()
函数, 它将生成与每个因子Levels
相对应的图。另一种方法是利用循环语句将所有绘图显示在一个显示器中,如下所示:
> x <- c(1,3,4,5,2,2,5,6,7,9,4,6)
> y <- c(3,2,1,2,4,5,3,6,4,8,5,5)
> ind <- factor(c("A","B","A","B","B","A","B","A","B","A","A","B"))
> xc <- split(x, ind)
> xc
$A
[1] 1 4 2 6 9 4
$B
[1] 3 5 2 5 7 6
> yc <- split(y, ind)
> for (i in 1:length(yc)) {
plot(xc[[i]], yc[[i]]); # 绘制各类的散点图
abline(lsfit(xc[[i]], yc[[i]])); # 画出拟合直线
}
请注意函数 split()
,它生成一个向量列表,该向量列表是根据一个因子指定的类别拆分一个较大的向量而获得的。这是一个有用的函数,主要用于箱线图。有关详细信息,请参阅帮助工具。
提醒:与正式的编程语言相比,for()
循环在 R 代码中的使用频率要低得多。
采用“整体对象”视角的代码在 R 中可能更清晰、更快速。
其他循环语句包括
repeat 循环表达式
和
while (逻辑表达式) 循环表达式
break
语句可用于终止任何循环,可能是异常的。这是终止repeat
语句的唯一方法。
next
语句可用于中断一次特定的循环并跳到“下一次”循环。相当于Python语言中的continue
.
条件语句和循环语句最常在自定义函数时出现。您在之后将见到这点。