パッケージに含めたい動的に生成された関数があります (興味がある場合は、下部のスポイラー ブロックで説明されている理由によります)。サポートされていない機能を使用せずに、パフォーマンスの低下を最小限に抑えたいと考えています。私がこれまでに考えた方法は、関数を生成するコードを に入れ、その関数を に.onLoad()
格納するかoptions()
、隠しオブジェクトとしてに格納すること.GlobalEnv
です。意図せずに変更または削除される可能性があるため、関数を に保存することは明らかに.GlobalEnv
危険です。それはoptions()
あまりにも起こる可能性があり、偶然ではありません。
生成された関数を保存するoptions()
のは最善の方法ですか?
私は多変量関数を持っています
Fn
。長くて醜い導関数で呼び出します。その関数の勾配 (つまり、特定の X で評価される各変数の一次導関数のベクトル) とヘッセ行列 (つまり、特定の X で評価される変数の各組み合わせの二次導関数の行列) を返す別の関数を作成したいと思います。バツ)。コードを保守しやすくするために、元の式を未評価の式として手作業でコード化し、残りの作業を , ,にFn
任せます。最終的には、必要な結果を返す動的に生成された関数オブジェクトになります。D()
eval()
`body<-`()
Adam Hyland のコメントには、この特定の質問に対する最も簡単な答えがあります。回答として投稿すると、受け入れられます。ただし、Richie Cotton の回答は一般的な場合に非常に役立ちますので、よろしくお願いします。