函数不使用R函数
我是R新手,当时正试图编写一个函数来搜索所有环境中的对象 下面的一段代码行可以很好地工作,但是当我将它们包含在“while”循环中时,它们就不起作用了。我想我遗漏了什么。有什么帮助吗函数不使用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有
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"