首页 > 解决方案 > 将 r2d3 的 JavaScript 控制台输出渲染到浏览器控制台而不是可视化?

问题描述

JavaScript 控制台输出r2d3直接呈现到 RStudio 查看器可视化中,而不是 JavaScript 控制台。请参阅文档

这似乎也是当

r2d3::r2d3(..., viewer = 'browser')

即,console.log()即使在浏览器中也不会输出到控制台。

是否有一种干净的方法来改变这种行为,以便将 D3.js 中的console.log()信息r2d3发送到浏览器控制台?

标签: r2d3

解决方案


R2D3 会覆盖包含可视化代码的影子 DOM 中的控制台。这就是控制台行为被改变的原因 - 这可能看起来不错,但不允许更仔细地检查对象或隐藏控制台。

在创建可视化时似乎没有任何参数可以修改它。这留下了两个选项,修改包或向可视化添加一行 javascript。我会和后者一起去这里。

文档窗口本身仍然保留默认的控制台行为,因此我们可以使用它来重新定义影子 DOM 控制台行为。在可视化中,在第一行添加:

console = d3.window(svg.node()).console;

还有其他访问窗口的方法,但这应该足够了,并且可能是最短的,它不适用于 d3v3,它可以使用:

console = svg.node().ownerDocument.defaultView.console;

是的,它并不理想而且有点老套,但它肯定比更改 R 源代码更容易(并且在更新包时继续这样做)。


推荐阅读