switch
位于 base
包(package)。 说明
switch
评估 EXPR
并相应地选择其他参数之一(在 ...
中)。
用法
switch(EXPR, ...)
参数
EXPR |
计算结果为数字或字符串的表达式。 |
... |
替代方案列表。如果 |
细节
switch
以两种不同的方式工作,具体取决于第一个参数的计算结果是字符串还是数字。
如果 EXPR
的值不是字符串,则它会被强制转换为整数。请注意,factor
也会发生这种情况,并带有警告,因为通常是字符级别的意思。如果整数介于 1 和 nargs()-1
之间,则计算 ...
的相应元素并返回结果:因此,如果第一个参数是 3
,则计算并返回第四个参数。
如果 EXPR
计算结果为字符串,则该字符串与 ...
中的元素名称(完全)匹配。如果存在匹配,则评估该元素,除非该元素缺失,在这种情况下,评估下一个非缺失元素,例如 switch("cc", a = 1, cc =, cd =, d = 2)
评估为 2
。如果存在多个匹配项,则使用第一个匹配元素。在不匹配的情况下,如果 ...
存在未命名元素,则返回其值。 (如果有多个这样的参数,则会发出错误信号。)
第一个参数始终被视为EXPR
:如果命名它的名称必须(部分)匹配。
如果未提供替代方案,则会发出警告信号,因为这通常是编码错误。
这是作为 primitive 函数实现的,该函数仅计算其第一个参数,如果选择了一个参数,则计算另一个参数。
值
...
或 NULL
的元素之一的值,不可见(只要未选择任何元素)。
结果具有所评估元素的可见性(请参阅invisible
)。
警告
可以编写调用switch
这可能会令人困惑,并且在早期版本中可能无法以相同的方式工作R。为了兼容性(和清晰度),始终有EXPR
作为第一个参数,如果可能部分匹配,则命名它。对于字符串形式,在命名值之后有一个未命名参数作为默认值。
例子
require(stats)
centre <- function(x, type) {
switch(type,
mean = mean(x),
median = median(x),
trimmed = mean(x, trim = .1))
}
x <- rcauchy(10)
centre(x, "mean")
centre(x, "median")
centre(x, "trimmed")
ccc <- c("b","QQ","a","A","bb")
# note: cat() produces no output for NULL
for(ch in ccc)
cat(ch,":", switch(EXPR = ch, a = 1, b = 2:3), "\n")
for(ch in ccc)
cat(ch,":", switch(EXPR = ch, a =, A = 1, b = 2:3, "Otherwise: last"),"\n")
## switch(f, *) with a factor f
ff <- gl(3,1, labels=LETTERS[3:1])
ff[1] # C
## so one might expect " is C" here, but
switch(ff[1], A = "I am A", B="Bb..", C=" is C")# -> "I am A"
## so we give a warning
## Numeric EXPR does not allow a default value to be specified
## -- it is always NULL
for(i in c(-1:3, 9)) print(switch(i, 1, 2 , 3, 4))
## visibility
switch(1, invisible(pi), pi)
switch(2, invisible(pi), pi)
参考
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
相关用法
- R sweep 扫除数组摘要
- R strsplit 分割字符向量的元素
- R seq.Date 生成规则的日期序列
- R search 给出 R 对象的搜索路径
- R solve 求解方程组
- R scan 读取数据值
- R sprintf 使用 C 风格字符串格式化命令
- R stop 停止函数执行
- R sign 标志函数
- R svd 矩阵的奇异值分解
- R strtoi 将字符串转换为整数
- R source 从文件、连接或表达式中读取 R 代码
- R sQuote 引用文字
- R substitute 替换和引用表达式
- R strrep 重复字符向量的元素
- R split 分组并重新集合
- R slice.index 数组中的切片索引
- R sort 对向量进行排序或排序
- R standardGeneric 形式化方法系统 – 调度 S4 方法
- R sequence 创建序列向量
- R startsWith 字符串是否以另一个字符串开头或结尾?
- R system.file 查找 R 系统文件的名称
- R sample 随机样本和排列
- R strwrap 将字符串换行以设置段落格式
- R seek 重新定位连接的函数
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Select One of a List of Alternatives。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。