【发布时间】:2014-04-08 19:23:15
【问题描述】:
为了帮助自己显示调试信息,我决定创建以下小函数,该函数将动态在 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 的“智能”。
那么,出了什么问题以及如何解决?
【问题讨论】:
-
在你的函数中显式调用 utils::View(...) 怎么样?
-
@KarlForner:刚刚发现你的评论。我试过
utils::View(...)调用,但它会导致以下错误和警告:"Error in .External2(C_dataviewer, x, title) : invalid device In addition: Warning message: In utils::View(...) : unable to open display"。这是在 RStudio Server 中运行我的代码。
标签: r debugging rstudio overloading rstudio-server