スクリプトのggplotプロットはRstudioに表示されません


82

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

例えば:

library(ggplot2)

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

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

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

スクリプトがソースされたときにRstudioにプロットを表示させるにはどうすればよいですか?Rstudio0.98.1062とR3.1.1を使用しています。

回答:


129

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

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()、デフォルトではエラーメッセージのみが出力されます。他に何か必要な場合は、明示的に要求する必要があります。


20

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

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


1
素晴らしい、それを知りませんでした!それは@MirosławZalewskiによって与えられた説明にうまく追加されます。
uwe 2016年


2

同様の問題(プロットがRStudioに表示されない)を検索したときにこの質問を見つけました。複雑なggplot2ブロックを部分的に実行してトラブルシューティングしようとしましたが、プロットウィンドウに何も表示されませんでした。

理由:tiff()以前に開いた関数が閉じていませんでした。

解決策:dev.off()以前のすべてのtiff()機能が完了するまで数回実行した後、RStudioでプロットを作成し、プロットウィンドウで結果を表示することができました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.