当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R Control 控制流


R语言 Control 位于 base 包(package)。

说明

这些是基本的 control-flow 结构R语言。它们的函数与任何 Algol-like 语言中的控制语句大致相同。他们都是预订的字。

用法

if(cond) expr
if(cond) cons.expr  else  alt.expr

for(var in seq) expr
while(cond) expr
repeat expr
break
next

参数

cond

不是 NA 的长度为 1 的逻辑向量。如果可能的话,其他类型被强制为逻辑类型,忽略任何类。 (长度大于 1 的条件是错误的。)

var

变量的语法名称。

seq

计算结果为向量(包括列表和 expression )或 pairlistNULL 的表达式。因子值将被强制转换为字符向量。这可以是一个长向量。

expr , cons.expr , alt.expr

正式意义上的表达。这可以是简单表达式,也可以是所谓的复合表达式,通常采用 { expr1 ; expr2 } 形式。

细节

break 跳出 forwhilerepeat 循环;控制权转移到最内层循环之外的第一条语句。 next 停止当前迭代的处理并推进循环索引。 breaknext 均仅适用于最内层的嵌套循环。

请注意,忘记在语句周围放置大括号 ( { .. } ) 是一个常见的错误,例如在 if(..)for(....) 之后。特别是, }else 之间不应有换行符,以避免在键盘或通过 source 输入 if ... else 构造时出现语法错误。因此,防御性编程的一种(有点极端)态度是始终使用大括号,例如,对于 if 子句。

for 循环中的 seq 在循环开始时计算;随后更改它不会影响循环。如果seq 的长度为零,则跳过循环体。否则,变量 var 依次分配 seq 的每个元素的值。您可以在循环体内分配给var,但这不会影响下一次迭代。当循环终止时,var 仍保留为包含其最新值的变量。

if 返回所计算表达式的值,如果没有,则 NULL 不可见(如果没有 else 则可能会发生这种情况)。

forwhilerepeat 不可见地返回 NULLforvar 设置为 seq 最后使用的元素,如果长度为零,则设置为 NULL

breaknext 在循环内转移控制时不返回值。

例子

for(i in 1:5) print(1:i)
for(n in c(2,5,10,20,50)) {
   x <- stats::rnorm(n)
   cat(n, ": ", sum(x^2), "\n", sep = "")
}
f <- factor(sample(letters[1:5], 10, replace = TRUE))
for(i in unique(f)) print(i)

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

Syntax对于基本的R语法和运算符,Paren用于括号和大括号。

ifelse , switch 用于其他控制流量的方式。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Control Flow。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。