33

物事をプロットするためにRスクリプトを呼び出すbashスクリプトがいくつかあります。何かのようなもの:

#!/bin/bash
R --vanilla --slave <<RSCRIPT
cat("Plotting $1 to $2\n")
input <- read.table("$1")
png("$2")
plot(as.numeric(input[1,]))
dev.off()
RSCRIPT

問題は、にもかかわらず--slave、を呼び出すとdev.off()メッセージが出力されることですnull device 1。多くのプロットが実行されると、または多数のファイルにプロットするより複雑なスクリプトの場合、これは非常に面倒になります。

このメッセージを抑制する方法はありますか?

4

5 に答える 5

44

「新しいアクティブなデバイスの番号と名前」という値を返すdev.off()ようなデバイス関連の関数とは異なり、私が知っている理由はありません。png()その値は、stdoutにエコーされているものです。

したがって、それを抑制することは、それをどこかに置くことによって達成することができます。

garbage <- dev.off()
于 2009-04-15T07:59:03.777 に答える
20

R の優れた点の 1 つは、多くの関数のソースを表示できることです。

> dev.off
function (which = dev.cur()) 
{
    if (which == 1) 
        stop("cannot shut down device 1 (the null device)")
    .Internal(dev.off(as.integer(which)))
    dev.cur()
}
<environment: namespace:grDevices>

したがって、.Internal(dev.off(...))dev.cur() を呼び出してから返します。これは、複数のデバイスを開いている場合に便利で、どのデバイスがアクティブになったかがわかります。スクリプトで使用.Internal(dev.off(as.integer(dev.cur())))したり、null デバイス以外dev.offの場合にのみ値を返すようにパッチを適用したり、パッチを R の管理者に送信したりできます。dev.cur()

また、すべてのデバイスをgraphics.off()呼び出しdev.off()、何も返しません。

于 2009-04-15T11:45:36.180 に答える
10

最近同じ問題に遭遇し、ここの回答にもう1つの可能性が記載されていないことに気付きました:

invisible(dev.off())

これにより出力が非表示になり、出力をvariable: woulddev.off()に代入する場合とは異なり、追加の変数が作成されません。garbagegarbage <- def.off()

于 2018-06-16T12:47:45.863 に答える
2

代わりにlittlerを使用できます。これは、a) R の「スクリプト」を作成する簡単な方法であり、b) 出力を抑制するため、dev.off がサイレントになるという副作用が得られます。

$ foo.r /tmp/foo.txt /tmp/foo.png
Plotting /tmp/foo.txt to /tmp/foo.png
$ cat /tmp/foo.r
#!/usr/bin/r
cat("Plotting", argv[1], "to", argv[2], "\n")
input <- read.table(argv[1])
png(argv[2])
plot(as.numeric(input[1,]))
dev.off()
$

Rscript もおそらく動作します。私は少しを好む傾向があります。

于 2009-07-23T13:18:21.290 に答える
2

別のオプションはsink()、すべてを使用してログ ファイルに出力することです。これにより、必要に応じてプロットが機能したかどうかを確認できます。

于 2009-04-15T08:51:01.157 に答える