首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数ls()对R中的环境做什么?

函数ls()对R中的环境做什么?
EN

Stack Overflow用户
提问于 2013-10-03 20:24:00
回答 1查看 2.4K关注 0票数 2

我运行以下代码

代码语言:javascript
复制
sapply( 0:3, function(x){ls(envir = sys.frame(x))} )

并得到以下结果

代码语言:javascript
复制
[[1]]
[1] "mat"         "mat_inverse"

[[2]]
[1] "FUN"       "simplify"  "USE.NAMES" "X"        

[[3]]
[1] "FUN" "X"  

[[4]]
[1] "x"

它似乎列出了当前封闭环境中的所有对象;我确实将mat和mat_inverse作为两个变量。但我不知道[2]、[3]、[4]会有什么回报。是否有方法调试此代码以跟踪该代码的功能?特别是以下部分:

代码语言:javascript
复制
envir = sys.frame(x)

让我很困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-03 21:14:15

sys.frame允许您返回调用堆栈。sys.frame(0)是堆栈的开始(可以说,您的初始工作区)。sys.frame(1)嵌套一层深度,sys.frame(2)嵌套两层深度等。

这段代码很好地演示了当您调用sapply时会发生什么。它经过四个环境(编号为0-3),并在每个环境中打印对象。实际上,sapplylapply的包装器。当您真正调用此代码时,您会得到什么样的环境?

环境0是开始,即整个工作区。环境1是sapply。键入sapply以查看其代码。您将看到函数头具有simplify,这是您在[2]中看到的变量之一。环境2为lapply。再次输入lapply以查看其代码;函数头包含FUNX。环境3是为运行sapply而定义的函数。它只有一个变量,x

作为一个实验,跑

代码语言:javascript
复制
sapply(0:3, function(x) { howdy = 5; ls(envir = sys.frame(x)) } )

最后一行将改为[1] "howdy" "x",因为您在最后一个环境中定义了一个新变量( lapplysapply中的函数)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19168607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档