Rstudioには奇妙な問題があります:スクリプトがggplot2関数を呼び出してプロットを表示する場合、Sourceを使用してスクリプトを実行してもプロットが生成されません。 Ctrl+A
でスクリプト全体を選択した場合、現在の行または選択範囲を実行します(Ctrl+Enter
)、次にプロットdoesディスプレイ。同様に、コンソールにプロットコマンドを入力すると、正しい出力が生成されます。
例えば:
library(ggplot2)
p = ggplot(mtcars, aes(wt, mpg))
p + geom_point()
ソースされた場合ではなく、コンソールに貼り付けられた場合にのみ出力を生成します。
これについては他にも質問がありますが、どちらも役に立ちません:
dev.off()
回避策が機能しない( "Error in dev.off() : cannot shut down device 1 (the null device)
" )スクリプトを入手したときにRstudioでプロットを表示するにはどうすればよいですか? Rstudio 0.98.1062およびR 3.1.1を使用しています。
私は最近この質問に出くわし、最新の方法はプロットの作成後にshow(p)
を呼び出すことであることに気付きました。
解決策は、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()
がデフォルトでエラーメッセージのみを出力するのはそのためです。他に何かが必要な場合は、明示的に要求する必要があります。
それはかなり古い質問ですが。 Rスタジオの編集ボックスで「ソース」ボタンを使用する場合、同じ問題があり、簡単な解決策が見つかりました。
「エコー付きソース」をオンにするだけで(Ctrl + Shift + Enter)、プロットが期待どおりに表示されます。