6

誰かが私に、より簡単な非コンピュータサイエンスの用語で、R(、、 ...など)のコールバック機能とは何かを説明できます taskCallbackか?Rヘルプを見てきましたが、情報が少し抽象的すぎることがわかりました。getTaskCallbackNamestaskCallbackManager

何をするように設計されており、ユーザーはそれらをどのように利用できますか?

誰かが(Rや他のコンピューター言語で)一般的な概念を説明し、Rで例を提供できれば、私は本当に理解できなかったので、とても感謝しています。それは再帰関数と何か関係があるのでしょうか、それとも名前のコールバックによって誤った方向に導かれるのでしょうか?

4

2 に答える 2

5

私は R についてあまり知らないので、ここで R の詳細を掘り下げることはできません。そうは言っても:

一般に、命令型、手続き型、および関数型プログラミング言語 (およびおそらく他のパラダイムでも) では、関数の呼び出しは、その関数が終了するまでブロックされ、関数の結果が呼び出し元に渡されます。これは通常、物事を行うのに適した方法ですが、場合によっては、これを実行しにくい方法にする要件がある場合があります。

実行時間の長い操作の場合、呼び出し元を長時間ブロックしたくない場合があります。環境によっては、呼び出し元が別のスレッドを生成する可能性がないか、可能なスレッド数が少なすぎて必要な数の並列呼び出しに対応できない可能性があるため、この同期方法で長時間実行操作を実行します非常に悪い経験をします。シングル スレッド モデルを使用し、頻繁にサーバーを呼び出す必要がある JavaScript が典型的な例です。

したがって、コールバックの基本的な考え方は、実際の処理が完了したときに呼び出された関数を返す代わりに、呼び出し元が Callback オブジェクトを渡すことです (OOP では、他のパラダイムでは、関数型プログラミング用のコールバック関数など、多くの場合匿名です)。 )。呼び出された関数はすぐに戻り、呼び出し元のスレッドを解放して他のことを行うことができます。長期実行プロセスが終了すると、 Callback が呼び出され、呼び出し元が長期実行プロセスから得られた結果を処理できるようになります。

このスキーマは少し一般化できるため、処理の最後にコールバックが呼び出されるだけでなく、処理に定期的にコールバックが呼び出され、ある種のステータス更新が提供されるため、発信者はたとえばユーザーにフィードバックを表示できます (ステータスバー、完了までの推定時間、...)。もう 1 つの一般的な追加機能は、呼び出し元が処理中にタスクをキャンセルする方法です。

それが一般原則です。おそらく、より知識のある人が、これが R にどのように適用されるか、および R がこの一般的な説明とどこで異なるかについて詳細を記入できます。

于 2012-08-13T14:48:59.337 に答える
4

詳細と例については、こちらを参照してください。

基本的な考え方は、再帰を扱うのではなく、R コマンド ラインに発行されたすべてのトップ レベル コマンドに対して関数 (または関数) を呼び出すことです。

これの 1 つの用途は TeachingDemos パッケージです。txtStartおよび関連する関数はタスク コールバックを使用して、各コマンドのコピーとその結果の出力を外部ファイルに保存し、対話型セッションのトランスクリプトを作成します。

于 2012-08-13T18:22:28.317 に答える