
高效优化
|
143
高效的基础
R
R
中,解决问题的方法通常不止一种,本节中我们特意给出可改善性能的标
准方式或替代方法。
if()
函数与
ifelse()
函数
ifelse() 是标准控制流程函数 if(test) if_yes else if_no 的向量化版本,
执行方式如下:
ifelse(test, if_yes, if_no)
在上面的虚构例子中,如果 test 的值为 TRUE 或者 FALSE
,
则返回值是 if_yes
或 if_no。例如,假如我们有一成绩表向量,ifelse() 可用于区分通过或未
通过:
marks = c(25, 55, 75)
ifelse(marks >= 40, "pass", "fail")
#> [1] "fail" "pass" "pass"
如果判断 (test) 条件的长度是
1
(例如 length(test) == 1)
,
则标准条件
判断语句:
mark = 25
if
(
mark >= 40
)
{
"pass"
} else {
"fail"
}
比下面的语句快大约
5
到
10
倍 ifelse(mark >= 40, "pass", "fail")。
ifelse() 另外的特异之处是:尽管它属于程序员级高效,因为它清晰明了、
比多行代码形式简洁易懂;但它往往比一个冗长的代码的计算效率更低。下
面代码基准测试结果说明这点:尽管两种计算结果一样,不过第二种形式速
度快大约
20
倍。
marks = runif(n = 10e6, min = 30, max = 99)
system.time ...