R基准代码不生成输出

时间:2016-02-27 06:26:42

标签: r linux unix

我不是R用户,但我正在尝试在我管理的各种计算机上生成一些基准信息,以告知即将进行的购买。

我在命令行(版本3.2.3)上使用R,并在R中键入以下内容,但这不会在R中生成任何结果。请注意,rbenchmark软件包已经安装。

任何建议或想法将不胜感激!谢谢!

> source("rbenchmark_ex.R")
Loading required package: rbenchmark
>

rbenchmark_ex.R 文件:

require('rbenchmark')

benchmark(1:10^6)

# Example 1 ------
# Benchmarking the allocation of one 10^6-element numeric vector,
# by default replicated 100 times
benchmark(1:10^6)

# simple test functions used in subsequent examples
random.array = function(rows, cols, dist=rnorm) 
  array(dist(rows*cols), c(rows, cols))
random.replicate = function(rows, cols, dist=rnorm)
  replicate(cols, dist(rows))

# Example 2 ----------
# Benchmarking an expression multiple times with the same replication count,
# output with selected columns only
benchmark(replications=rep(100, 3),
          random.array(100, 100),
          random.array(100, 100),
          columns=c('test', 'elapsed', 'replications'))

# Example 3 ---------
# Benchmarking two named expressions with three different replication
# counts, output sorted by test name and replication count,
# with additional column added after the benchmark
within(benchmark(rep=random.replicate(100, 100),
                 arr=random.array(100, 100),
                 replications=10^(1:3),
                 columns=c('test', 'replications', 'elapsed'),
                 order=c('test', 'replications')),
       { average = elapsed/replications })

# Example 4
# Benchmarking a list of arbitrary predefined expressions
tests = list(rep=expression(random.replicate(100, 100)), 
             arr=expression(random.array(100, 100)))
do.call(benchmark,
        c(tests, list(replications=100,
                      columns=c('test', 'elapsed', 'replications'),
                      order='elapsed')))

1 个答案:

答案 0 :(得分:1)

如果您提供文件,则默认情况下不会打印任何内容。有几种方法可以解决这个问题,具体取决于你想要什么。

R控制台中的输出

如果要强制只打印一些内容,可以将它们包装在print()命令中。例如:

 print(benchmark(1:10^6))

如果要打印所有内容,则还可以为source()函数提供更多参数。有三种有用的可能性:

  • source("rbenchmark_ex.R", echo = TRUE):这回应了评估的代码在每行代码后打印结果。基本上,这看起来好像是要从脚本中键入每一行到控制台并对其进行评估。

  • source("rbenchmark_ex.R", print.eval = TRUE):这只会打印结果,但不会回显源代码。

  • source("rbenchmark_ex.R", echo = TRUE, print.eval = FALSE):这只会回显代码,但不会打印结果。 (可能没那么有用......)

输出到文件

也许您宁愿将输出放在文件中。这可以通过使用sink()(在评论中42-建议)来完成。只需将以下行添加到您的脚本中,之后的所有输出都将写入文件:

sink("output.txt")

然后,您可以使用上述选项指定R控制台中的脚本,以指定所需的输出类型。

使用命令行

您也可以直接从命令行执行此操作,而无需先启动R控制台。例如:

Rscript -e 'source("rbenchmark_ex.R", echo = TRUE)'

如果您在脚本中使用了>,这会将输出写入控制台(当然,您可以将其重定向到sink())或文件。你也可以直接运行

Rscript rbenchmark_ex.R

但这只会打印结果而不会回显代码。