Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
`高级R`book:查找包含`name绑定的所有环境`_R_Environment Variables_Pryr - Fatal编程技术网

`高级R`book:查找包含`name绑定的所有环境`

`高级R`book:查找包含`name绑定的所有环境`,r,environment-variables,pryr,R,Environment Variables,Pryr,在本书中,练习在环境一章的第10/23页,在迭代与递归一节之后。是的 修改where()以查找包含的绑定的所有环境 名称 这里,where()来自pryr包。首先,为了确保我理解被问到的问题:假设我有名字意思。这可指: > mean function (x, ...) UseMethod("mean") <bytecode: 0x2234b58> <environment: namespace:base> 于是我写道: where2 <- function

在本书中,练习在
环境
一章的第10/23页,在
迭代与递归
一节之后。是的

修改
where()
以查找包含的绑定的所有环境
名称

这里,
where()
来自
pryr
包。首先,为了确保我理解被问到的问题:假设我有名字
意思
。这可指:

> mean
function (x, ...) 
UseMethod("mean")
<bytecode: 0x2234b58>
<environment: namespace:base>
于是我写道:

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))
  }
}
并获取包含基本和全局环境的列表


我应该做些什么以及如何做?

此函数解决了以下问题:

    where_2 = function (name, env = parent.frame(), env_list = list()) 
{

  stopifnot(is.character(name), length(name) == 1)
  env <- as.environment(env)
  if (identical(env, emptyenv())) {
    if (length(env_list) == 0) {
      stop("Can't find ", name, call.=FALSE)
    } else {
      return(env_list)
    }
  } else if (exists(name, env, inherits = FALSE)) {
    env_list = append(env_list, env)
    where_2(name, parent.env(env), env_list = env_list)
  }
  else {
    where_2(name, parent.env(env), env_list = env_list)
  }
}
where_2=function(name,env=parent.frame(),env_list=list())
{
stopifnot(是.字符(名称),长度(名称)==1)

env要查找包含名为“mean”的对象的所有环境,您可以使用
find(“mean”)
,这将导致
[1]”。GlobalEnv“package:base”
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))
  }
}
> source("./where2.r")
> mean <- 3
> k <- list()
> where2(k, "mean", parent.frame())
Error: Can't find mean
    where_2 = function (name, env = parent.frame(), env_list = list()) 
{

  stopifnot(is.character(name), length(name) == 1)
  env <- as.environment(env)
  if (identical(env, emptyenv())) {
    if (length(env_list) == 0) {
      stop("Can't find ", name, call.=FALSE)
    } else {
      return(env_list)
    }
  } else if (exists(name, env, inherits = FALSE)) {
    env_list = append(env_list, env)
    where_2(name, parent.env(env), env_list = env_list)
  }
  else {
    where_2(name, parent.env(env), env_list = env_list)
  }
}