R的性能分析工具可以按较高频率(如每隔几毫秒)抽查正在被调用的函数, 因为函数可以嵌套调用, 所以会记录下来正在嵌套调用的各个函数。 因为抽查的速度很快, 所以会得到大量的被调用函数的抽样数据, 这样就可以进行概括, 得知哪些函数被调用最频繁, 调用的途径是怎样的。 基本R的utils::Rprof()可以收集程序运行的性能分析用数据, 而utils::summaryRprof()则可以用文本格式提供性能分析的概括。
在RStudio软件中, 借助于profvis扩展包, 我们可以从Profile菜单对选定行进行性能分析。 但是, 对比较复杂的程序, 应该将要分析的程序保存为一个R源文件, 并用source()的方法将要运行的函数载入, 并用profvis()函数调用该函数并显示运行后性能分析结果。
例18.6 以18.4的程序为例。 我们将第一个程序包装为一个函数bad_copy()并存入文件bad_copy.R中, 然后用profvis进行性能分析。
bad_copy.R文件内容为:
bad_copy <- function(){
M <- 1E5
x <- c()
for(i in seq(M)){
x <- c(x, diff(range(runif(10))))
}
mean(x)
}
安装好profvis扩展包后,运行如下的性能分析程序:
library(profvis)
profvis(bad_copy())
结果在RStudio中将显示如下的两个窗格内容: