除了事实上的 Rscript 是通过 #!/usr/bin/env Rscript
被调用,而 littler 是通过 #!/usr/local/bin/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)
这里是更小的文件:
#!/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
简而言之:除了明显的执行时间差异,还有其他差异吗?更重要的问题是:为什么应该/不应该选择 littler 而不是 Rscript(或反之亦然)?