0

为了帮助自己显示调试信息,我决定创建以下小函数,该函数将在 RStudio 的内部数据浏览器中显示数据和简单的基于字符的输出之间动态切换,具体取决于平台的功能,我的模块的来源在:

View <- function (...) {
  if (.Platform$GUI == "RStudio")
    View(...)
  else
    print(...)
}

此功能与其他实用功能一起位于模块中<PROJ_HOME>/utils/debug.R。所有需要这些功能的模块,都通过source("../utils/debug.R").

在我的 Amazon EC2 实例的 Linux 控制台上运行我的项目代码很好。但是,通过 RStudio Server 在同一虚拟机上运行它会导致以下错误消息:

Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
Error during wrapup: evaluation nested too deeply: infinite recursion / options(expressions=)?

在我看来,R 对View()需要调用哪个函数感到困惑。最初,我假设 RStudio重载utils::View()并且我尝试显式调用它,但它失败了。然后我认为 RStudio 以某种方式定义了它View()在全局环境中的实现,因此只需要在View()没有包/库引用的情况下调用它。但是,正如我所见,它也不起作用。该错误的另一个潜在原因可能是我在使用...参数方面高估了 R 的“智能”。

那么,出了什么问题以及如何解决呢?

4

1 回答 1

1

RStudio 挂钩该View功能。一种方法可能是查看是否有人从 utils 覆盖了 View 函数,如果存在则调用覆盖。那这个呢?

View <- if (identical(utils::View, View)) print else View
于 2014-03-11T04:47:18.377 回答