環境 "名前空間:統計" をつかむことができますし、 "パッケージ:統計"パッケージ/名前空間環境で同じ名前の関数の値/参照の等しいか?
ns = getNamespace("stats")
pkg = as.environment("package:stats")
は今の両方で機能 "SD" を取得することができます:
nsSd = get("sd" , envir = ns , inherits = FALSE)
pkgSd = get("sd" , envir = pkg , inherits = FALSE)
は、彼らは同じですか?彼らです!しかし、「同じ」とはどういう意味ですか?参照または価値の平等?
identical(nsSd , pkgSd)
これはFALSE次返すので、参照平等を意味します
test1 = function() {}
test2 = function() {}
identical(test1 , test2)
しかし、それは本当ならば、それは環境のフレームは、関数オブジェクトと一緒に関数ポインタを含むことができることを意味します。この問題をさらに複雑にすることは、関数がある環境で "生きている"ことができるという事実ですが、関数はその実行環境が別の環境であることを伝えることができます。部屋SoDAは答えを持っていないようです(その濃密な本、多分私はそれを逃した!)
私は決定的な答えをしたいと思います。次のうち正しいものはどれですか?または、ここに偽の三角法がありますか?
nsSd
とpkgSd
pkgSd
内のオブジェクトは、その実行環境nsSd
とpkgSd
としてns
を有している(他の各 のコピーが)2つの異なるオブジェクトは、同じオブジェクトへのポインタされています。nsSd
はpkgSd
へのポインタであり、そのようなものとして、彼らはこれは主にあなたの主な質問への答えではありません同じ
内部の 'same'関数のcコードを見てみる価値があります。 http://svn.r-project.org/R/trunk/src/main/identical.c –
あなたは人生をあまりにも複雑にしていると思います。私たちは知っている* 'sd()'関数が1つしかないので、表示される違いはそれぞれenvironemntとnamespaceを経由するアクセスパスによるものです。 –
R内部のマニュアルによれば、関数の型は 'CLOSXP'です。マッチするポインタは同じものとしてカウントされ、そうでない場合は、同じ 'formals'、' body'、 'CLOENV(x)'が何であるかをチェックします。 –