-1
本書では、章の10/23ページ、Iteration vs. Recursion
の練習問題があります。 name
のバインディングが含まれているすべての環境を見つけるために、修正where()
`Advanced R` book:` name`のバインドを含むすべての環境を見つける
です。
ここで、where()
はpryr
パッケージからです。まず第一に、何が尋ねられるのかを理解するために:mean
という名前があるとします。これは、を参照してください可能性:
> mean
function (x, ...)
UseMethod("mean")
<bytecode: 0x2234b58>
<environment: namespace:base>
しかし、また、私は同じ名前の変数に値を代入言う:だから
> mean <- 3
> mean
[1] 3
、今(私が間違っている場合は、私を修正してください)、前者のmean
はbaseenv()
であり、後者はglobalenv()
である。正しい?
> ls(as.environment(globalenv()))
[1] "mean"
> which(ls(as.environment(baseenv()))=="mean")
[1] 671
だから私は書いた:pryr
パッケージからwhere
機能に触発
where2 <- function(k, name, env) {
stopifnot(is.character(name), length(name) == 1)
# Why does this only work when calling 'where' from
# the 'pryr' package?
# env <- to_env(env)
# Hopefully the same as 'to_env'.
# env <- as.environment(env)
# Successful case.
if(exists(name, env, inherits=FALSE)) {
k <- list(k, env)
where2(k, name, parent.env(env))
}
# Base case or search one level up.
if(identical(env, emptyenv())) {
stop("Can't find ", name, call.=FALSE)
} else {
where2(k, name, parent.env(env))
}
}
を。リストには、ベース - と地球環境をcontainint
> source("./where2.r")
> mean <- 3
> k <- list()
> where2(k, "mean", parent.frame())
Error: Can't find mean
をしてもらう:
私は今(Rプロンプトで)行うことができます願っていました。
どうすればよいのですか?
あなたは '' [1]「.GlobalEnv」にもたらされる '(「平均」)を見つけるを使用することができ、「平均」という名前のオブジェクトが含まれているすべての環境を確認するには"package:base" ' –