9.2.2 循环控制: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),我们将依这种分类指标绘制 yx 的散点图。一种方法时用函数 coplot()1 产生对应因子各个水平的散点图。另外一种方法就是把所有图在屏幕上同时显示,如下面命令所示:

> 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)形式可能既清晰又高效2

其他循环语句包括

> repeat expr

和语句

> while (condition) expr

关键字 break 可以用于结束任何循环,甚至是非常规的。它是结束 repeat 循环的唯一办法。

关键字 next 可以用来结束一次特定的循环,然后直接跳入“下一次”循环。

控制语句的应用常常和函数相关。这在下一章编写你自己的函数中会详细讨论,同时也会引用更多的例子。


1. 将在后面的的内容中讨论,或者用包 lattice 里面的函数 xyplot。
2. 译者注:R 里面显式的循环语句在时间和空间的运行效率上几乎是不能忍受的。但显式的循环常常能避免的,我们可以利用函数对象对成组的元素计算值, 如用 sum,mean 等统计函数及 apply、lapply 、sapply、tapply 等函数都可以部分代替显式循环。

results matching ""

    No results matching ""