[この質問はchat room, by Spacedmanで解決されましたが、私は将来的に他人の利益のためにそれを掲示しています。]R内の関数内のローカル環境をどのように参照できますか?
私はそれのlocalFunc
内部を作成する機能、myFunc
を、持っています。 (NB:これはパッケージに含まれていませんが、地球環境にあります)localFunc
が検索パスに存在する場所を知りたいのですが、mvbutils::foodweb
で分析したいと思います。ここで
は一例です。
myFunc <- function(){
require(data.table)
require(mvbutils)
localFunc <- function(x){
return(as.data.table(x))
}
vecPrune <- c("localFunc",ls("package:data.table"))
ix <- match("data.table",search())
tmpWeb <- foodweb(where = c(1,ix), prune = vecPrune, plotting = FALSE)
return(tmpWeb)
}
しかし、myFunc()
への呼び出しは、localFunc
がdata.table()
を呼び出すことを示していないようです。これは間違っています - 何がありますか?
(NB:where
引数が検索パスを指定する。)
アップデート1:トミーとSpacedmanが指摘するように、トリックenvironment()
を指定することです。 foodweb()
への呼び出しは、where = c(1, ix)
を参照しています。インデックス1
は間違いです。それは、search()
ベクトルの最初の項目であることが多い(常に?).GlobalEnv
が検索する正しい場所であると考えたことから生じました。それは間違いです。代わりに、environment()
を参照する必要があり、正しい呼び出しは以下のとおりです。 (NB:ix
はsearch()
data.table()
出力での位置を指定)
tmpWeb <- foodweb(where = c(environment(),ix), prune = vecPrune, plotting = FALSE)
これはローカル関数にRスクリプトファイルからコードをラップcheckScriptDependencies
呼び出された関数に、this questionに対する回答に表示され、それをfoodweb
によって分析する。これはenvironment()
の使い方の制限された例であり、Tommyはこの文脈でそれと同様の機能をどのように使用するかをよく説明しています。
これは私がチャットルームで言ったことです。今すぐ@iterator、彼にチックを与える:) – Spacedman
@Spacedmanあなたはあなたのチャンスを持っていた。:)トミー、ありがとう - 何が起こっているのあなたの精緻化が役立ちます。私はSpacedmanのチャットのコメントから答えを知っていましたが、質問を自己答弁にしたくありませんでした。あなたがしたように、誰かがより説得力のある説明をすることを望んでいました。 – Iterator
curEnvはcallStack [3]と同じですが、parentとgrandparentは他のcallStacksとまったく異なっていますが、なぜですか? – qed