私のグローバル環境変数はmyList
です。私はmyList
を変更し、それをmyFunction
というグローバル環境に再割り当てする関数を持っています。 myList
をmyFunction
で変更したいだけです。他の機能がmyList
を変更しないようにする方法はありますか?オブジェクトを変更できる関数を制限する
バックグラウンドでは、私はRユーザーのための一般的なツールを構築しています。私はツールのユーザーがmyList
を変更する独自の関数を定義できるようにしたくありません。私は将来自分が書くかもしれない機能でmyList
を修正できるように自分自身に望みません。
私は潜在的な解決策を持っていますが、私はそれが気に入らないのです。ツールが実行されると、ユーザーが定義したすべての関数のテキストを調べて、myList
というテキストをグローバル環境に割り当てるテキストを検索できます。私はすべての機能を検索する必要があるという事実は好きではありません。
私が探しているものがRで実装可能かどうか知っていますか?ご提供いただけるお手伝いをありがとうございます。
再現可能な例として、次の例を可能にするコードが必要です。
assign('myList', list(), envir = globalenv())
myFunction <- function() {
myList <- c(myList, 'test')
assign('myList', myList, envir = globalenv())
}
userFunction <- function() {
myList <- c(myList, 'test')
assign('myList', myList, envir = globalenv())
}
myFunction() # I need some code that will allow this function to run successfully
userFunction() # and cause an error when this function runs
あなたはS3クラスを見てください。そのクラスに固有のデータ構造とメソッドをほとんど持っているのが最適な解決策になるでしょう。あなたのデータは関数によって作成されたものではなく変更されているので、最初の入力は常に自由に実行できます。 – zacdav