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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。