为了帮助自己显示调试信息,我决定创建以下微小的功能,动态在RStudio的内部数据浏览器中显示数据和简单的基于字符的输出之间切换,具体取决于<平台的em> capabilities ,我的模块来源于:
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的“智能性”。
那么,有什么问题以及如何解决它?
答案 0 :(得分:1)
RStudio挂钩View
函数。一种方法可能是查看是否有人从utils覆盖了View函数,并调用覆盖(如果存在)。那这个呢?
View <- if (identical(utils::View, View)) print else View