私は R についてあまり知らないので、ここで R の詳細を掘り下げることはできません。そうは言っても:
一般に、命令型、手続き型、および関数型プログラミング言語 (およびおそらく他のパラダイムでも) では、関数の呼び出しは、その関数が終了するまでブロックされ、関数の結果が呼び出し元に渡されます。これは通常、物事を行うのに適した方法ですが、場合によっては、これを実行しにくい方法にする要件がある場合があります。
実行時間の長い操作の場合、呼び出し元を長時間ブロックしたくない場合があります。環境によっては、呼び出し元が別のスレッドを生成する可能性がないか、可能なスレッド数が少なすぎて必要な数の並列呼び出しに対応できない可能性があるため、この同期方法で長時間実行操作を実行します非常に悪い経験をします。シングル スレッド モデルを使用し、頻繁にサーバーを呼び出す必要がある JavaScript が典型的な例です。
したがって、コールバックの基本的な考え方は、実際の処理が完了したときに呼び出された関数を返す代わりに、呼び出し元が Callback オブジェクトを渡すことです (OOP では、他のパラダイムでは、関数型プログラミング用のコールバック関数など、多くの場合匿名です)。 )。呼び出された関数はすぐに戻り、呼び出し元のスレッドを解放して他のことを行うことができます。長期実行プロセスが終了すると、 Callback が呼び出され、呼び出し元が長期実行プロセスから得られた結果を処理できるようになります。
このスキーマは少し一般化できるため、処理の最後にコールバックが呼び出されるだけでなく、処理中に定期的にコールバックが呼び出され、ある種のステータス更新が提供されるため、発信者はたとえばユーザーにフィードバックを表示できます (ステータスバー、完了までの推定時間、...)。もう 1 つの一般的な追加機能は、呼び出し元が処理中にタスクをキャンセルする方法です。
それが一般原則です。おそらく、より知識のある人が、これが R にどのように適用されるか、および R がこの一般的な説明とどこで異なるかについて詳細を記入できます。