
144
|
第
7
章
result1 = ifelse(marks >= 40, "pass", "fail")
}
)
#> user system elapsed
#> 4.293 0.351 4.667
system.time({
result2 = rep("fail", length(marks))
result2[marks >= 40] = "pass"
}
)
#> user system elapsed
#> 0.192 0.052 0.244
identical(result1, result2)
#> [1] TRUE
R-devel
邮件列表中有一份关于基础
R
中加速 ifelse() 的讨论。一个简单办
法是使用
dplyr
中的 if_else(),尽管在相同系列中讨论,但不是所有情况下
它都能替代 ifelse()。根据我们测试结果,测试例子中 if_else() 表现很好,
并且也远快于基础
R
的实现(尽管它仍比硬编码方法慢大约
3
倍):
system.time({
result3 = dplyr::if_else(marks >= 40, "pass", "fail")
}
)
#> user system elapsed
#> 1.065 0.188 1.253
identical(result1, result3)
#> [1] TRUE
排序和排名
排序一个向量是相对较快的;排序一个长度为
10
7
的向量大约花费
0.01
秒。
如果你只在一个脚本顶部排序一次向量,不需过于担心这个问题 ...