...除了在脚本文件的第一行中用#!/usr/bin/env Rscript
和 littler 用#!/usr/local/bin/r
调用 R脚本外(在我的系统上)。我发现执行速度有些差异(好像littler有点慢)。
我创建了两个虚拟脚本,每个虚拟脚本运行了1000次,并比较了平均执行时间。
这是Rscript文件:
#!/usr/bin/env Rscript
btime <- proc.time()
x <- rnorm(100)
print(x)
print(plot(x))
etime <- proc.time()
tm <- etime - btime
sink(file = "rscript.r.out", append = TRUE)
cat(paste(tm[1:3], collapse = ";"), "\n")
sink()
print(tm)
这是littler文件:
#!/usr/local/bin/r
btime <- proc.time()
x <- rnorm(100)
print(x)
print(plot(x))
etime <- proc.time()
tm <- etime - btime
sink(file = "little.r.out", append = TRUE)
cat(paste(tm[1:3], collapse = ";"), "\n")
sink()
print(tm)
如您所见,它们几乎是相同的(第一行和接收器文件参数不同)。输出被
sink
编辑到文本文件,因此与read.table
一起导入到R中。我创建了bash脚本来执行每个脚本1000次,然后计算平均值。这是bash脚本:
for i in `seq 1000`
do
./$1
echo "####################"
echo "Iteration #$i"
echo "####################"
done
结果是:
# littler script
> mean(lit)
user system elapsed
0.489327 0.035458 0.588647
> sapply(lit, median)
L1 L2 L3
0.490 0.036 0.609
# Rscript
> mean(rsc)
user system elapsed
0.219334 0.008042 0.274017
> sapply(rsc, median)
R1 R2 R3
0.220 0.007 0.258
长话短说:除了(明显的)执行时间差异外,还有其他差异吗?更为重要的问题是:为什么/为什么您不应该选择Rscript而不是Rscript,反之亦然?
最佳答案
情侣快速评论:
/usr/local/bin/r
是任意的,您可以像在某些示例中一样使用/usr/bin/env r
。我记得,它限制了您可以给r
提供的其他参数,因为通过env
调用时仅需要一个参数tests/timing.sh
和tests/timing2.sh
。也许您想在启动和图形创建之间进行测试,或者进行其他操作。 Rscript.exe
的源代码,则它会通过设置环境和命令字符串(最终调用execv(cmd, av)
)而起作用。 littler可以更快地开始。 因此,这是个人喜好。我共同撰写了littler,做了很多事情(例如,对于RInside),但仍然发现它很有用-因此我每天都要使用数十次。它驱动蔓越莓。它驱动cran2deb。嘿,您的里程可能会有所不同。
免责声明:littler是我的项目之一。
后记:我会把测试写成
我会写成这样
fun <- function { X <- rnorm(100); print(x); print(plot(x)) }
replicate(N, system.time( fun )["elapsed"])
甚至
mean( replicate(N, system.time(fun)["elapsed"]), trim=0.05)
摆脱异常值。而且,您实际上仅测量了两者都将从R库获得的I / O(打印和打印),因此我希望两者之间的差异不大。