5

我正在使用 RStudio,我希望能够在特定行停止代码执行。

这些函数在第一个脚本文件中定义并从第二个脚本文件中调用。

我使用将第一个文件源到第二个文件中source("C:/R/script1.R")

我使用从头到尾运行:从第二个脚本开始运行,该脚本具有函数调用,并在第一个脚本中突出显示函数定义所在的行。

然后我用它browser()来查看变量。然而,这并不理想,因为涉及到一些大型矩阵。有没有办法让这些变量出现在 RStudio 的工作区中?

此外,当我使用 run from line to end 重新启动时,它只会运行到被调用的第一个脚本文件的末尾,它不会返回调用函数并完成第二个文件的运行。

如何在 RStudio 中实现这些目标?

好的,这是一个简单的例子,下面的函数加法器是在一个脚本中定义的

adder<-function(a,b) {  
  browser()
  return(a+b)
 }

我比电话来自第二个脚本

x=adder(3,4)

在第二个脚本中调用 adder 时,在第一个脚本中启动 browser()。从这里我可以使用 get("a") 来获取 a 的值,但是 a 和 b 的值没有出现在 RStudio 的工作区中?

在此处的示例中,这并不重要,但是当您有几个大型矩阵时,它确实很重要。

4

2 回答 2

3

您所说的 RStudio 工作区是 R 会话中的全局环境。每个函数都存在于自己的小环境中,不会将其局部变量暴露给全局环境。因此a在 RStudio 的对象检查器中不存在。

这是一种很好的编程实践,因为它可以将较大脚本的各个部分相互屏蔽,从而减少不必要的交互量。例如,如果您i在一个函数中用作计数器,这不会影响i另一个函数中计数器的值。

您可以使用任何常用功能检查a您何时处于浏览器会话中。例如,

head(a)
str(a)
summary(a)
View(a)
attributes(a)

调用后的一种常见策略browser是获取当前(父)环境中所有变量的摘要。养成每次使用 停止代码时browser立即ls.str()在命令行键入的习惯。

于 2012-09-20T18:53:53.253 回答
3

如果您分配数据,.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
于 2012-09-20T21:18:27.400 回答