CellBench提供了测量管道运行时间的能力。这是使用time_methods ()
函数的运行方式与apply_methods ()
是的,不同的是它不是并行运行的。这是一种有意的设计选择,因为并行运行通常会导致对计算机资源的竞争,因此产生不太可靠或稳定的计时。
计时方法的设置与应用方法相同。你有一个数据列表和一个函数列表,然后你使用time_methods ()
而不是apply_methods ()
.
- list(data1 = c(1,2,3)) #使用Sys. library(CellBench) #在列表数据集中包装一个简单的向量。sleep in函数模拟长时间运行的函数transform <- list(log = function(x) {Sys.sleep(0.1);log(x)}, sqrt = function(x) {Sys.sleep(0.1);√(x)}) # time函数res <- datasets %>% time_methods(transform) res
## #一个tibble: 2 × 3 ## data transform timed_result ## ## 1 data1 log ## 2 data1 sqrt
我们通常在哪里吃结果
我们现在有一列timed_result
,这是一个包含两个对象的列表:计时对象和结果。有必要保存结果,以便我们可以把计算串在一起。
res timed_result美元[[1]]
## $计时##用户系统运行## 0.001 0.000 0.100 ## ## $结果## [1]0.0000000 0.6931472 1.0986123
就像……一样apply_methods ()
,可以应用更多的方法列表,结果将组合扩展。在这种情况下,计时将累积应用的方法。
transform2 <- list(+ = function(x) {Sys.sleep(0.1);x + 1},负=函数(x) {Sys.sleep(0.1);X - 1}) res2 <- datasets %>% time_methods(transform) %>% time_methods(transform2) res2
## #一个tibble: 4 x 4 ## data transform transform2 timed_result ## ## 1 data1 log + ## 2 data1 log - ## 3 data1 sqrt + ## 4 data1 sqrt -
的结果类time_methods ()
是benchmark_timing_tbl
.一旦应用了所有的方法,结果可能被丢弃使用unpack_timing ()
并且可以将物体变换成更平坦的形状资源描述
表示。看到proc_time ?
来解释什么用户
,系统
而且运行
请参考。
计时值已转换为持续时间
对象的lubridate
包,这些表现为以秒为单位的数值测量,但具有更好的打印属性(尝试润滑::持续时间(1000,单位=“秒”)
).
res2 %>% unpack_timing()
##数据转换:4 x 6 ##数据转换用户系统运行## <持续时间> <持续时间> <持续时间> ## 1数据a1日志+ 0.003s 0s 0.203 3s ## 2数据a1日志- 0.003s 0s 0.203 3s ## 3数据a1 sqrt + 0.006s 0s 0.205s ## 4数据a1 sqrt - 0.005s 0s 0.206s
或者,计时信息可以被丢弃benchmark_tbl
可以使用strip_timing ()
.
res2 %>% strip_timing()
## #一个tibble: 4 x 4 ## data transform transform2 result ## ## 1 data1 log + ## 2 data1 log minus ## 3 data1 sqrt + ## 4 data1 sqrt minus
CellBench提供了一种简单的方法,可以通过各种方法的组合来测量管道的运行时间。这是用time_methods ()
函数,以相同的方式调用apply_methods ()
具有相同的连锁性质。生成的对象可以通过两种有用的方式进行转换,如平面宠物猫
将计时扩展为列并丢弃结果,或者将计时扩展为benchmark_tbl
用结果作为一个list-column
抛弃时机。