函数不使用R函数

函数不使用R函数,r,R,我是R新手,当时正试图编写一个函数来搜索所有环境中的对象 下面的一段代码行可以很好地工作,但是当我将它们包含在“while”循环中时,它们就不起作用了。我想我遗漏了什么。有什么帮助吗 name<-10 env=parent.frame() !identical(env,emptyenv()) exists('name',envir=env,inherits = FALSE) env<-parent.env(env) env name有

我是R新手,当时正试图编写一个函数来搜索所有环境中的对象

下面的一段代码行可以很好地工作,但是当我将它们包含在“while”循环中时,它们就不起作用了。我想我遗漏了什么。有什么帮助吗

    name<-10
    env=parent.frame()
    !identical(env,emptyenv())
    exists('name',envir=env,inherits = FALSE)
    env<-parent.env(env)
    env

name有一个输入错误:您需要在对parent.frame()的调用中添加括号


MyWhere这里有一些问题。您遇到的错误是因为您正在传递函数
parent.env
,而不是环境
parent.env()
,作为默认环境值

此外,匹配名称时不返回环境,这会导致函数匹配时出现无限循环。最后,当函数不匹配时,它不会返回空环境

当您修复这些问题时,它似乎起到了作用:

MyWhere<-function(name,env=parent.frame()){
  while(!identical(env,emptyenv())){
    if (exists(name,envir=env,inherits = FALSE)) {
      return(env)
    } else {
      env<-parent.env(env)
    }
  }
  return(env)
}

foo <- 3
MyWhere('foo')
# <environment: R_GlobalEnv>
MyWhere('blah')
# <environment: R_EmptyEnv>
library(ggplot2)
MyWhere('geom_line')
# <environment: package:ggplot2>
# attr(,"name")
# [1] "package:ggplot2"
# attr(,"path")
# [1] "/Library/Frameworks/R.framework/Versions/3.2/Resources/library/ggplot2"

mywhere注意在R中,

MyWhere<-function(name,env=parent.frame()){
MyWhere<-function(name,env=parent.frame()){
  while(!identical(env,emptyenv())){
    if (exists(name,envir=env,inherits = FALSE)) {
      return(env)
    } else {
      env<-parent.env(env)
    }
  }
  return(env)
}

foo <- 3
MyWhere('foo')
# <environment: R_GlobalEnv>
MyWhere('blah')
# <environment: R_EmptyEnv>
library(ggplot2)
MyWhere('geom_line')
# <environment: package:ggplot2>
# attr(,"name")
# [1] "package:ggplot2"
# attr(,"path")
# [1] "/Library/Frameworks/R.framework/Versions/3.2/Resources/library/ggplot2"