可能,我只是错过了一个参数...但是,也许有人可以指出我:如何在R中运行分析并将结果存回某处?我知道R函数只能返回一个对象,但我可以在这里使用列表或粘贴基准测试结果并将分析存储在函数的返回值中.
但是,有没有办法评估基准(或system.time)和分析而不像这样运行两次?:
require(rbenchmark)
bmark <- function(x){
res <- list()
res[[1]] <- benchmark(x^6)
res[[2]] <- x^6
res
}
Run Code Online (Sandbox Code Playgroud)
编辑:对不起,我对我真正想做的事情感到困惑.也许用例更清楚:我没有一个典型的基准测试情况,我想检查我的自定义函数是否比其他函数更快.相反,我在不同的机器上使用不同的数据运行相同的东西.我不需要在测试环境中使用它,但是在生产中 - 我只想让脚本的用户知道花了多长时间.如果这是一个小时或更长的人可以计划他们的午休:).
这是使用两个函数的示例.第一个使用plyr,第二个使用data.table.
# dummy data
require(plyr)
require(data.table)
set.seed(45)
x1 <- data.frame(x=rnorm(1e6), grp = sample(letters[1:26], 1e6, replace=T))
x1.dt <- data.table(x1, key="grp")
# function that uses plyr
DF.FUN <- function(x) {
ddply(x1, .(grp), summarise, m.x = mean(x))
}
# function that uses data.table
DT.FUN <- function(x) {
x1.dt[, list(m.x=mean(x)),by=grp]
}
require(rbenchmark)
> benchmark( s1 <- DF.FUN(), s2 <- DT.FUN(), order="elapsed", replications=2)
# test replications elapsed relative user.self sys.self user.child sys.child
# 2 s2 <- DT.FUN() 2 0.036 1.000 0.031 0.006 0 0
# 1 s1 <- DF.FUN() 2 0.527 14.639 0.363 0.163 0 0
Run Code Online (Sandbox Code Playgroud)
现在,s1和s2包含从每个功能的结果,与基准比较的结果将显示在屏幕上.
# > head(s1)
# grp m.x
# 1 a 0.0069312201
# 2 b -0.0002422315
# 3 c -0.0129449586
# 4 d -0.0036275338
# 5 e 0.0013438022
# 6 f -0.0015428427
# > head(s2)
# grp m.x
# 1: a 0.0069312201
# 2: b -0.0002422315
# 3: c -0.0129449586
# 4: d -0.0036275338
# 5: e 0.0013438022
# 6: f -0.0015428427
Run Code Online (Sandbox Code Playgroud)
这是你追求的吗?