38

関数をパッケージ名前空間内にプッシュして、そのパッケージの内部オブジェクトにアクセスできるようにしたいと思います (例として stats パッケージを使用しましょう)。使ってみました

myfun <- function(x) print(x)
env = loadNamespace("stats")
assign("myfun", myfun , env)

しかし、それはロックされています。だから私は自分のオブジェクトのロックを解除しようとしました

unlockBinding("myfun", env)

myfun はまだ存在しないため、ロックを解除できません。

助けはありますか?

4

3 に答える 3

38

@Hadleyのソリューションに沿っていますが、名前空間の環境を使用すると、次のようになります。

environment(myfun) <- asNamespace('stats')
于 2010-08-04T02:25:11.430 に答える
19

新しい関数の環境を適切な場所に設定してみませんか?

myfun <- function(x) print(x)
environment(myfun) <- as.environment("package:stats")
于 2010-06-22T21:43:47.510 に答える
6

3 つのコロン演算子を使用して、パッケージの内部オブジェクトにアクセスできます:::。たとえば、as.romanとを見てくださいutils:::.roman2numeric。(これを と比較してくださいutils::.roman2numeric。) これにより、関数を名前空間内に配置する必要がなくなります。

また、名前空間のロックを停止するパッケージdont.lockBindingsを確認することもできます。mvbutils

于 2010-06-22T14:46:57.600 に答える