は、私が目を満たしているよりも、それへの多くの側面があるがわかりました。関数オブジェクトの属性は何ですか/どこですか? R内の関数で遊んことで
f <- function(x)x^2
通常f
の「属性」、広い意味では、(I)仮引数のリスト、(ⅱ)以下のとおりです。
はTHSシンプルな機能の割り当ては、コンソールで直接入力を検討します(iii)機能評価フレームのエンクロージャとなる環境に依存している。 、これはテキストとして印刷されている
> attributes(f)
$srcref
function(x)x^2
:のは、それらに到達してみましょう
> str(f)
function (x)
- attr(*, "srcref")=Class 'srcref' atomic [1:8] 1 6 1 19 6 19 1 1
.. ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile' <environment: 0x00000000145a3cc8>
:
> formals(f)
$x
> body(f)
x^2
> environment(f)
<environment: R_GlobalEnv>
また、str
戻っ詳細はf
に添付:彼らは、経由してアクセスできます
> c(attributes(f)$srcref)
[1] 1 6 1 19 6 19 1 1
:それは数値ベクトルとして格納されています
そして、このオブジェクトも、独自の属性があります。
> attributes(attributes(f)$srcref)
$srcfile
$class
[1] "srcref"
最初のものは3つの内部オブジェクトで、環境です:そこ
> mode(attributes(attributes(f)$srcref)$srcfile)
[1] "environment"
> ls(attributes(attributes(f)$srcref)$srcfile)
[1] "filename" "fixedNewlines" "lines"
> attributes(attributes(f)$srcref)$srcfile$filename
[1] ""
> attributes(attributes(f)$srcref)$srcfile$fixedNewlines
[1] TRUE
> attributes(attributes(f)$srcref)$srcfile$lines
[1] "f <- function(x)x^2" ""
あなたがいます!これは、Rがattributes(f)$srcref
を印刷するために使用する文字列です。
だから、質問は以下のとおりです。
は
f
にリンクされている任意の他のオブジェクトがありますか?もしそうなら、それらに達する方法?attributes(f) <- NULL
を使用して属性のf
を削除しても、機能には影響しないようです。これには何らかの欠点がありますか?
あなたの2番の主張は非常に懐疑的です。間接的な環境呼び出しや、 'body'要素の変更を含む、剥奪された関数からの詰め物を叩いた場合を除いて、私はそれについて気づかないかもしれません。 –
@CarlWitthoft、 'R_GlobalEnv'とは異なる環境で(実際にはエンクロージャ内のシンボルを探す)関数で' attributes(f)< - NULL'を使ってみましたが、それでも動作します。また、 'body < - 'を使うと自動的にその属性から関数を取り除きます。以下のジョシュの答えを考えれば、これらの属性を最初から空にすることさえできます。属性が必要な場所で別のテストを提案できますか? –