光沢のあるアプリがあり、それを実行するとobject of type ‘closure’ is not subsettable
。それは何ですか、どうすれば修正できますか?
注:私はこの質問をたくさん書いたので書きましたが、可能性のあるだましはshiny
に関連していないか、または答えが広く適用できることは明らかではないほど具体的です。
この質問 も参照してください。これは、Shiny以外のコンテキストでこのエラーをカバーしています。
これを修正する方法:
これは、光沢のあるアプリで非常に一般的なエラーです。これは、reactive()
関数を使用してlist
、_data.frame
_、またはvector
などのオブジェクトを作成するときに最も一般的に表示されます。つまり、オブジェクトは入力の種類。これを行う場合、後でオブジェクトを参照するときに、括弧を含める必要があります。
たとえば、次のようにリアクティブな_data.frame
_を作成するとします。
_MyDF<-reactive({ code that makes a data.frame with a column called “X” })
_
その後、_data.frame
_を参照し、MyDF
または_MyDF$X
_を呼び出すと、エラーが発生します。代わりに、MyDF()
またはMyDF()$X
にする必要があります。reactive()
を使用して作成するオブジェクトには、この命名規則を使用する必要があります。
これが起こる理由:
_data.frame
_などのリアクティブオブジェクトをreactive()
を使用して作成する場合、それを他の非リアクティブな_data.frame
_と同じように考え、それに応じてコードを記述したい場合があります。ただし、作成したのは実際には_data.frame.
_ではありません。むしろ、作成したのは命令、関数の形式でで、これは_data.frame
_の作成方法を示します。必要なとき。実際にこの関数を使用して_data.frame
_を取得する場合、Rの他の関数と同様に括弧を使用する必要があります。括弧を使用することを忘れた場合、Rは、関数とエラーを提供します。入力してみてください:
_plot$x
_
コマンドラインで同じエラーが表示されます。
アプリの起動時にこのエラーが表示されない場合があります。リアクティブオブジェクトには、いわゆる「遅延」評価があります。これらは、何らかの出力に必要になるまで評価されません。したがって、_data.frame
_がプロットの作成にのみ使用される場合、_data.frame
_は、ユーザーが初めてプロットを見るまで存在しません。アプリの起動時にユーザーがボタンをクリックするかタブを変更してプロットを表示する必要がある場合、_data.frame
_のコードはそれが発生するまで評価されません。それが起こると、入力の現在の値を使用して、プロットを作成するために必要な_data.frame
_を構築する関数を実行します。かっこを使用するのを忘れた場合は、この時点でshinyがエラーを表示します。入力が変化しても、ユーザーがプロットを見ていなければ、_data.frame
_を作成する関数は、ユーザーが再びプロットを見るまで再実行されないことに注意してください。