成组表达式
R 是一种表达式语言(expression language)因为它仅有的命令形式 是返回结果的函数和表达式。赋值操作实际上 也是一个表达式结果的再分配,并且可以用在 任何表达式中,甚至多重赋值 也是允许的。
命令可以用大括弧圈在一起 {
expr_1;
…;
expr_m}
。此时,这一组命令的结果 是该组中最后一个命令的值。既然一个组依然是一个表达式, 它就可能放在括弧中,放在一个更大的表达式中, 等等。
条件控制:if
语句
R 语言的条件语句形式为
> if (expr_1) expr_2 else expr_3
其中 expr_1 是控制条件, 表达式的其他部分则是不言而喻的。
“短路”(short-circuit)操作符 &&
和 ||
常常用于 if
语句的条件控制部分。这里要注意 &
和 |
将用于向量的所有元素,而 &&
和 ||
仅用于长度为1的向量和必要时评价第二个参数
R 提供了 if
/else
条件语句向量形式的函数 ifelse
。它的使用方式是 ifelse(condition, a, b)
,最终返回一个和最长的参数向量同长的向量。 condition[i]
为真时,该向量对应的元素是 a[i]
,否则为 b[i]
。
循环控制:for
循环,repeat
和 while
R 语言有下面形式的 for
循环架构
> for (name in expr_1) expr_2
其中 name 是循环变量。expr_1 是一个 向量表达式(常常以1:20
这种形式出现),而 expr_2 常常是根据虚拟变量 name 而设计的成组表达式。在 name 访问 expr_1 所有 可以取到的值时,expr_2 都会 运行。
假定 ind
是分类指标向量(vector of class indicators), 我们将依这种分类指标绘制 y
对 x
的散点图。 一种方法时用函数 coplot()
产生对应因子各个水平的散点图。 另外一种方法就是把所有图在屏幕上同时 显示,就如下面命令所示:
> xc <- split(x, ind) > yc <- split(y, ind) > for (i in 1:length(yc)) { plot(xc[[i]], yc[[i]]); abline(lsfit(xc[[i]], yc[[i]])) }
(函数 split()
通过某个因子把一个 大的向量分成一系列小的向量。 这是一个非常有用的函数,常常和 盒状图一起使用。具体细节可以用 help
命令得到。)
警告:相比其他程序语言,R 代码里面很少使用
for()
循环 。在R里面用`完整对象’(whole object)形式 可能既清晰又高效。
另外一种循环语句包括
> repeat expr
和语句
> while (condition) expr
关键字 break
可以用于结束任何循环,甚至是非常规的。 它是结束 repeat
循环的唯一办法。 关键字 next
可以用来结束一次特定的循环,然后直接跳入 “下一次”循环。 控制语句常常用于 函数中。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。