我正在使用RStudio,我希望能够在特定的行停止代码执行。
这些函数在第一个脚本文件中定义,并从第二个脚本文件中调用。
我使用source("C:/R/script1.R")
我使用从头到尾的运行:我从第二个脚本开始运行,该脚本具有函数调用,并在第一个脚本中突出显示了函数定义所在的行。
然后我使用browser()
来查看变量。然而,这并不理想,因为涉及一些大的矩阵。有没有办法让这些变量出现在RStudio的工作空间中?
此外,当我从一行到另一行重新使用run时,它只运行到被调用的第一个脚本文件的末尾,它不会返回到调用函数并完成第二个文件的运行。
如何在RStudio中实现这些目标?
好的,这是一个简单的例子,下面的函数加法器在一个脚本中定义
adder<-function(a,b) {
browser()
return(a+b)
}
我打电话来自第二个剧本
x=adder(3,4)
在第二个脚本中调用adder时,在第一个脚本中启动browser()。从这里我可以使用get(&#34; a&#34;)来获取a的值,但a和b的值不会出现在RStudio的工作区中?
在这里的示例中,它并不重要,但是当你有几个大矩阵时,它确实存在。
答案 0 :(得分:3)
您所称的RStudio工作空间是R会话中的全局环境。每个函数都存在于自己的小环境中,而不是将其局部变量暴露给全局环境。因此,RStudio的对象检查器中不存在a
。
这是一种很好的编程习惯,因为它可以屏蔽较大脚本的各个部分,从而减少不必要的交互量。例如,如果在一个函数中使用i
作为计数器,则不会影响另一个函数中计数器i
的值。
您可以使用任何常用功能在浏览器会话中检查a
。例如,
head(a)
str(a)
summary(a)
View(a)
attributes(a)
调用browser
后的一个常见策略是获取当前(父)环境中所有变量的摘要。养成每次使用browser
停止代码时的习惯,立即在命令行键入ls.str()
。
答案 1 :(得分:2)
如果您将数据分配到.GlobalEnv
,它将显示在RStudio的“工作区”选项卡中。
> adder(3, 4)
Called from: adder(3, 4)
Browse[1]> a
[1] 3
Browse[1]> b
[1] 4
Browse[1]> assign('a', a, pos=.GlobalEnv)
Browse[1]> assign('b', b, pos=.GlobalEnv)
Browse[1]> c
[1] 7
> a
[1] 3
> b
[1] 4