用R语言进行数据分析:循环和条件控制

成组表达式

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循环,repeatwhile

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), 我们将依这种分类指标绘制 yx的散点图。 一种方法时用函数 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」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。

(0)
上一篇 2015-11-15 22:57
下一篇 2015-11-22 01:38

相关文章

关注我们
关注我们
分享本页
返回顶部