首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rscript与littler的区别

Rscript与littler的区别
EN

Stack Overflow用户
提问于 2010-07-08 15:34:00
回答 1查看 5.1K关注 0票数 40

...besides的事实是,Rscript是用#!/usr/bin/env Rscript调用的,littler是在脚本文件的第一行中使用#!/usr/local/bin/r (在my system上)调用的。我发现了执行速度上的某些差异(看起来有点慢)。

我创建了两个虚拟脚本,每次运行1000次,并比较平均执行时间。

下面是Rscript文件:

代码语言:javascript
复制
#!/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)

这是一个小文件:

代码语言:javascript
复制
#!/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脚本:

代码语言:javascript
复制
for i in `seq 1000`
do
./$1
echo "####################"
echo "Iteration #$i"
echo "####################"
done

其结果是:

代码语言:javascript
复制
# 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更喜欢小一点(反之亦然)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-08 15:52:41

几个简短的评论:

  1. 路径/usr/local/bin/r是任意的,您可以像我们在一些示例中一样使用/usr/bin/env r。我记得,它限制了您可以给r的其他参数,因为通过env
  2. I调用它只需要一个参数,因此不理解您的基准测试,以及为什么要这样做。我们在源代码中确实有时间比较,参见tests/timing.shtests/timing2.sh。也许你想把测试分为启动和图形创建或者你想要的任何东西。每当我们运行这些测试时,
  3. 都会赢。(当我现在重新运行它的时候,它还是赢了。)这对我们来说很有意义,因为如果您查看Rscript.exe的源代码,在最终调用execv(cmd, av)之前,通过设置环境和命令字符串,它的工作方式是不同的。
  4. 的主要价格是便携性。就像小程序的构建方式一样,它无法进入Windows。或者至少不容易。OTOH,我们已经移植了to...
  5. Littler,所以如果有人真的想要的话,2007.
  6. Rscript在2006年9月第一次出现,而Rscript在4月份随R2.5.0而来,2007.
  7. Rscript现在到处都是R。在我看来,这是一个大的advantage.
  8. Command-line选项,对于一些小的选项来说更明智一些。
  9. 都使用CRAN包getopt和optparse进行选项解析。

所以这是个人偏好。我和别人合作写了一些零碎的东西,学到了很多(比如RInside),但仍然觉得它很有用--所以我每天都用几十次。它驱动CRANberries。它驱动cran2deb。你的里程,就像你说的,可能会有所不同。

免责声明: littler是我的项目之一。

我会把考试写成

我会把这个写成

代码语言:javascript
复制
  fun <- function { X <- rnorm(100); print(x); print(plot(x)) }
  replicate(N, system.time( fun )["elapsed"])

甚至是

代码语言:javascript
复制
  mean( replicate(N, system.time(fun)["elapsed"]), trim=0.05)

去处理那些离群点。此外,您只需要测量I/O (打印和绘图),这两者都将从R库中得到,所以我希望没有什么不同。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3205302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档