web-dev-qa-db-ja.com

スクリプトのggplotプロットがRstudioに表示されない

Rstudioには奇妙な問題があります:スクリプトがggplot2関数を呼び出してプロットを表示する場合、Sourceを使用してスクリプトを実行してもプロットが生成されません。 Ctrl+Aでスクリプト全体を選択した場合、現在の行または選択範囲を実行しますCtrl+Enter)、次にプロットdoesディスプレイ。同様に、コンソールにプロットコマンドを入力すると、正しい出力が生成されます。

例えば:

library(ggplot2)

p = ggplot(mtcars, aes(wt, mpg))
p + geom_point()

ソースされた場合ではなく、コンソールに貼り付けられた場合にのみ出力を生成します。

これについては他にも質問がありますが、どちらも役に立ちません:

スクリプトを入手したときにRstudioでプロットを表示するにはどうすればよいですか? Rstudio 0.98.1062およびR 3.1.1を使用しています。

65
Superbest

私は最近この質問に出くわし、最新の方法はプロットの作成後にshow(p)を呼び出すことであることに気付きました。

1
Superbest

解決策は、ggplotオブジェクトでprint()を明示的に呼び出すことです。

library(ggplot2)

p <- ggplot(mtcars, aes(wt, mpg))
p <- p + geom_point()
print(p)

ggplot関数は、クラスggplotのオブジェクトを返します。 ggplot2は、print関数をオーバーロードすることにより動作し、クラスggplotのオブジェクトに対して異なる動作をします-STDOUTに出力する代わりに、チャートを作成します。

Rはほとんどのコマンドがprint()関数を介して実行されると想定しているため、すべてが対話モードで正常に機能しています。これは便宜上のものであり、rnorm(1)と入力して、目に見える出力を取得できます。 [現在の選択を実行]コマンドを使用すると(Ctrl+Enter)、RStudioは、選択した各行が対話モードで入力されて実行されたかのように動作します。選択した数行を実行した後、Consoleペインでコマンド履歴を確認することで、それを確認できます。

ただし、この便利なモードは、source()によってファイルが読み取られると破棄されます。この関数は(潜在的に長く、計算コストの高い)Rスクリプトを実行することを目的としているため、低優先度のメッセージでSTDOUTを汚染することは望ましくありません。 source()がデフォルトでエラーメッセージのみを出力するのはそのためです。他に何かが必要な場合は、明示的に要求する必要があります。

106

それはかなり古い質問ですが。 Rスタジオの編集ボックスで「ソース」ボタンを使用する場合、同じ問題があり、簡単な解決策が見つかりました。

「エコー付きソース」をオンにするだけで(Ctrl + Shift + Enter)、プロットが期待どおりに表示されます。

15
bcat