デバッグ情報の表示を支援するために、モジュールがソースされているプラットフォームの機能に応じて、RStudio の内部データ ブラウザーでのデータの表示と単純な文字ベースの出力を動的に切り替える次の小さな関数を作成することにしました。で:
View <- function (...) {
if (.Platform$GUI == "RStudio")
View(...)
else
print(...)
}
この関数は、他のユーティリティ関数とともにモジュールにあります<PROJ_HOME>/utils/debug.R
。これらの機能を必要とするすべてのモジュールは、 経由でインクルードしsource("../utils/debug.R")
ます。
Amazon EC2 インスタンスの Linux コンソールでプロジェクトのコードを実行しても問題ありません。ただし、RStudio Server を介して同じ仮想マシンで実行すると、次のエラー メッセージが表示されます。
Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
Error during wrapup: evaluation nested too deeply: infinite recursion / options(expressions=)?
R は、どのView()
関数を呼び出す必要があるかについて混乱しているように思えます。最初は、RStudio が をオーバーロードしていると思い込みutils::View()
、明示的に呼び出そうとしましたが、失敗しました。次に、RStudio がグローバル環境でその実装を何らかの形で定義しているため、パッケージ/ライブラリ参照なしView()
で呼び出すだけでよいと考えました。View()
しかし、ご覧のとおり、それも機能しません。...
エラーのもう 1 つの潜在的な理由は、引数の使用に関して R の「スマートさ」を過大評価したことです。
それで、何が間違っていて、それを修正する方法は?