以外の環境にメソッドをソースすることは可能.GlobalEnv
ですか?
私は R のマスキング メカニズムに少し不満を感じています (この点に関しては、おそらく独自の質問に戻ってくるでしょうが、興味がある場合は、今のところ、パッケージRMySQL
をRSQLite
同じプロセスで使用して、それらをロードしてみてください。この順序; RMySQL がクラッシュします)、すべてのスクリプト全体<namespace>::foo()
ではなく、一貫して使用するように切り替えたいと考えています。foo()
ただし、<namespace>::foo()
「ローカル コピー」を使用するよりも効率的ではありません (たとえばnamespace..foo <- <namespace>::foo()
、興味のある人のために例を提供できますが、自分でテストするのは非常に簡単です)。
(ほとんどの場合)名前空間があるため、ローカル コピーを作成すると、読み込んでいる他のパッケージの扱いがうまくいきますが、自分のコードが「パッケージ」になる前はそうではありません。
だから私は「自分のものをソースにNS <- newenv(parent=emptyenv())
して、他のパッケージと同じルーチンを適用しましょう」と思いました。しかし、Rは私を許しません:
setGeneric(
name="fooBar",
signature=c("src"),
def=function(src, ...){
standardGeneric("fooBar")
}
)
setMethod(
f="fooBar",
signature=signature(src="character"),
definition=function(src, ...){
cat(src, sep="\n")
}
)
# These would go into:
"Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/gnrc.R"
"Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/mthd.R"
# This works:
source("Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/gnrc.R")
source("Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/mthd.R")
# This does not:
NS <- new.env(parent=emptyenv())
source("Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/gnrc.R", local=NS)
source("Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/mthd.R", local=NS)
eval(parse(file="Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/gnrc.R"), envir=NS)
eval(parse(file="Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/mthd.R"), envir=NS)
エラー:
> source("Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/gnrc.R", local=NS)
Error in eval.with.vis(expr, envir, enclos) :
could not find function "setGeneric"
> source("Q:/usr/wsp/3.6.2/32bit/root/_SCRATCH/mthd.R", local=NS)
Error in eval.with.vis(expr, envir, enclos) :
could not find function "setMethod"
私が間違っているかもしれないことは何ですか?