解读 R 中 system.time 函数的输出
system.time()
函数是我们可以用来估计代码执行所需时间的工具之一。它的输出给出了三个值:用户、系统和经过的时间(以秒为单位)。
在对所涉及的术语进行简要说明后,我们将查看此函数的输出示例,以了解每个值所测量的内容。
理解 R 中 system.time
函数输出中的术语
在 system.time()
函数的输出中,最容易理解的术语是第三个值:elapsed。它测量代码块运行时经过的时钟时间。
在几乎所有情况下,这对用户都很重要:他们必须等待 R 完成运行代码。
另外两个,用户和系统的组合,测量 CPU 执行代码块的时间。
简单来说,我们可以将它们视为如下。
用户时间是处理用户应用程序代码(R 代码)所花费的 CPU 时间。如果用户应用程序访问系统资源,则该处理时间将报告为系统时间。
参考资料部分中给出的 Wikipedia 文章提供了有关 CPU 时间的这两个组成部分的简要技术细节。
R 中的 system.time
输出示例
下面的简单示例显示了如何使用 system.time()
函数。
示例代码:
system.time({
print("Hello to R.")
})
输出:
[1] "Hello to R."
user system elapsed
0.001 0.000 0.001
system.time()
函数在代码块之前和之后调用 proc.time()
函数,并给出了区别。
它等同于以下内容。
示例代码:
x = proc.time()
print("Hello to R.")
y = proc.time()
y-x
输出:
> x = proc.time()
> print("Hello to R.")
[1] "Hello to R."
> y = proc.time()
> y-x
user system elapsed
0.001 0.001 0.001
看下面两个例子来了解用户时间和系统时间的区别。
在第一个示例中,R 计算了 1000 次并且只打印了一次。多次运行此代码块并检查结果。
示例代码:
system.time({
x=0
for(i in 1:1000){
x = x+1
}
print(x)
})
输出:
user system elapsed
0.009 0.000 0.011
虽然用户时间是正数,但系统时间在大多数情况下几乎为 0。
现在,让我们看另一个执行相同计算但打印 1000 次的代码示例。
示例代码:
system.time({
x=1
for(i in 1:1000){
x = x+1
print(x)
}
})
输出:
user system elapsed
0.093 0.026 0.120
现在,我们发现系统时间也是正数。这是因为 1000 个 print
语句使 R 可以访问操作系统的输入输出资源。
最后,为了说明经过的时间,让我们看一个 CPU 长时间空闲的例子。
示例代码:
system.time({
Sys.sleep(5) # Time in seconds.
})
输出:
user system elapsed
0.013 0.006 5.000
我们发现经过的时间远远超过 CPU 时间。它(几乎)与我们指定的睡眠时间相同,因为代码没有做任何其他事情。
参考
以下两篇 Wikipedia 文章提供了与 CPU 时间相关的简要技术细节。
相关文章
R 中具有多个条件的函数向量化
发布时间:2023/03/21 浏览次数:64 分类:编程语言
-
一项常见的数据分析任务是根据同一行的其他列使用一个或多个条件创建或更新数据框列。 如果我们尝试使用 if 语句来执行此操作,则只会使用第一行来测试条件,并且会根据该行更
在 R 中读取 xlsx 文件
发布时间:2023/03/21 浏览次数:66 分类:编程语言
-
在这篇文章中,你将会了解到两个在 R 中读取 xlsx 文件的最完整和最容易使用的库:readxl 和 openxlsx。