【问题标题】:How to call plot.xts when using RScript使用 RScript 时如何调用 plot.xts
【发布时间】:2013-04-25 11:09:52
【问题描述】:

更新:感谢 Joshua 的评论,我意识到问题不在函数内部,而是在脚本内部。所以我编辑了问题并提供了我自己的答案。


当我以交互方式使用plot.xts() 时,它会弹出一个图形窗口。我只是从一个函数内部尝试了它(我正在对单元测试进行故障排除并需要一些视觉帮助)但没有出现任何内容。啊哈,我说,我知道诀窍,只需使用print

但是print(plot.xts(x)) 仍然没有显示图表,而是打印我的 xts 对象! IE。它与print(x) 完全相同。

我用来运行单元测试的脚本是:

#!/usr/bin/Rscript --slave

library('RUnit')

options(warn=2) #Turn warnings into errors

#By naming the files runit.*.R, and naming the functions test*(), we can use
#    all the defaults to defineTestSuite().
#NOTE: they have a weird default random number generator, so changed here
#    to match the R defaults instead.
test.suite=defineTestSuite('tests',dirs=file.path('tests'),
    rngKind = "Mersenne-Twister", rngNormalKind = "Inversion")

test.result <- runTestSuite(test.suite)

printTextProtocol(test.result)

【问题讨论】:

  • 你能提供一个可重现的例子吗?这对我有用:f &lt;- function(x) plot(x); f(.xts(1:10,1:10)).
  • 谢谢约书亚;你的例子对我有用。我明天会对此进行调查,然后可能会改写或删除这个问题:我敢打赌这与我如何运行单元测试有关。

标签: r xts


【解决方案1】:

下面的脚本做了两件事:

  • 绘制到设备文件,就像在无头设置(如网络服务器)中一样,

  • 绘制屏幕设备,我使用x11(),但您可以使用win()

Rscript 没有任何限制。这与xts 无关,因为您可以轻松地绘制xts 对象。

#!/usr/bin/Rscript

set.seed(42)
x <- cumsum(rnorm(100))

png("/tmp/darren.png")
plot(x)
dev.off()

x11()
plot(x)
Sys.sleep(3)  # could wait for key pressed or ...

【讨论】:

  • 感谢 Dirk,x11() 已添加到我的工具箱中!两个后续问题,如果可以的话:我如何等待按键(readline 被忽略),然后如何删除图表(我尝试了dev.off(),但不是这样)?我试过x11();plot(x$High);cat("Press enter");readline()
  • readLines() 工作,等待CTRL-d。您也可以使用基于事件的 tck/tk,或者尝试par(ask=TRUE)
【解决方案2】:

在使用 RScript 时,你不能使用图形(或像 readline 这样的输入函数)。但是 RScript 仍然只是 R,所以当你想添加一些交互式的东西(例如用于故障排除)时,请启动 R ,然后输入:

source('run_tests.R')

以这种方式运行时,如下所示的线条显示图表:

plot(x$High);cat("Press a key");readline()

当使用./run_tests.R 直接从命令行运行时,该行会被忽略。

【讨论】:

  • 天哪,不——当然您可以在 RScript 中绘图。看我的回答。
猜你喜欢
  • 2015-07-03
  • 2021-10-27
  • 2016-11-21
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 2016-07-03
相关资源
最近更新 更多