内容

1简介

BrowserViz提供了交互式R/浏览器可视化的基础和一个非常简单的工作示例。因此,两个相互作用的强大和互补的环境被连接起来,为探索性数据分析创建了一个强大的混合设置。

这项工作的动机是我们相信当代的网络浏览器,支持HTML5和Canvas,并运行越来越强大的Javascript库(例如,d3),cytoscape.js已经成为开发用于探索性数据分析的交互式图形的最佳环境。我们预测,已经功能强大且易于编程的web浏览器将在呈现功能和交互性方面稳步提高,因此在未来几年仍将是R交互可视化的最佳设置。

闪亮的而且htmlwidgets这是两个非常流行的软件包,它们为同样的问题提供了解决方案:如何使用R的web浏览器图形功能?
这两个包都在R中创建到HTML小部件和Javascript对象的绑定。这将在R中为这些对象创建表示:一个按钮,一个d3散点图,一个交互式地理地图。这两个包为这些绑定提供了良好的支持,并为创建更多绑定提供了清晰的路径。

BrowserViz和这些有价值的包之间的主要区别是仅使用松散耦合R和浏览器。以口号的形式,我们的方法可以概括为“让R是R, Javascript是Javascript”。BrowserViz链接了wo个丰富的编程环境,但是这些环境彼此之间保持了最大程度的无知。只有简单的JSON消息来回传递,而且这些消息都是高语义级别的:没有HTML、CSS或Javascript。BrowserViz提供了一种编程风格,而不是在R中创建web对象的表示,这将是两个环境的紧密耦合

BrowserViz为那些希望创建R/web浏览器可视化的人提供了一个非常低的门槛。这个基本包隐藏了websocket启动和消息传递的复杂性。websocket通信通道是通过一个R函数调用创建的。传递消息和处理响应同样简单。web浏览器界面的复杂(或简单)是由程序员决定的。大量易于获取的书籍、示例、教程和支持网站使web浏览器编程特别容易学习。对于任何对数据可视化感兴趣、精通或愿意学习R和Javascript的程序员来说,BrowserViz方法都很有吸引力。

可以创建独立的网站,但这个包的主要目标受众是R程序员,他们可以在R中探索和分析数据,并使用浏览器可视化来获得它所提供的不可缺少的好处。我们希望能够创造出更多的可视化工具。我们提供了一个简单的x-y绘图仪(参见browservizdemo来说明如何编写BrowserViz子类应用程序)。bioconductor RCyjs包是一个功能齐全的网络可视化工具cytoscape.js还有网络浏览器。

BrowserViz类虽然是一个用于子类化的基类,但它包含一个简单的演示,用于执行一些基本的浏览器操作,并向浏览器查询一些简单的状态(窗口大小、窗口标题、浏览器版本)。该包的主要目标是提供websocket的“管道”以及用于在两个环境之间通信的标准(简单,开放式)消息协议。

2标准消息格式

正如无所不在和语言中立一样websocket协议提供了BrowserViz通信机制JSON提供消息符号。R(一个命名列表,例如)和Javascript(一个对象,键:值对)中的原生数据类型很容易通过每种语言的标准库与JSON进行转换。R数据帧有点棘手。

我们采用了一种简单、适应性强的数据结构,足够灵活,可以满足目前遇到的所有用途。JSON(和Javascript):

{{cmd: "setBrowserWindowTitle",状态:" request",回调:" handlerresponse ",有效载荷:" BrowserViz Demo"}}

Websocket服务器可以发送和接收消息。因此,一个典型的BrowserViz事件首先从一个环境向另一个环境发送消息,通常以某种类型的返回或结束回调消息。

库(jsonlite) msg <- toJSON(list(cmd="setBrowserWindowTitle", status="request", callback=" handlerresponse ", payload="BrowserViz demo"))

这个请求的回调可以是空的,按照约定我们将其编码为空字符串。R中的调用代码和Javascript中的接收代码只需保持一致即可。如果调用者提供了一个非空回调, Javascript接收者应该制作并发送一个带有规范的四个字段指定的返回消息cmd =回调和任何有效载荷打电话的人也许在期待

{cmd: " handlerresponse ",状态:" success",回调:"",有效载荷:" BrowserViz Demo"}

一个空有效载荷也可以用,在哪种情况下成功return命令的status是Javascript返回给r的唯一信息,所有这类决定都留给程序员。通常是同一个人编写R和Javascript代码,在websocket上来回通信。如果涉及到不同的程序员,那么就需要对期望、约束和有效负载结构进行仔细的沟通和记录。

3.简单的BrowserViz应用程序

我们预测BrowserViz的主要用途将是作为其他丰富的可视化包的基类,这些派生类的作者将能够继续工作,而无需直接参与websocket创建和处理的具体细节。尽管如此,BrowserViz是一个完整的R/浏览器应用程序,尽管它只有一些特性。这些特性(BrowserViz对象上的R方法)虽然数量很少,但可以自动用于所有BrowserViz子类。

这些方法中的最后两个用于此包的日常测试。概念简单,它们也说明了基本的用法:

注意browserVizBrowserFile下面第二和第六行提到的,包含在这个包中,是HTML, javascript和css的组合。当你构造一个BrowerViz应用程序时,你提供这个文件名;该文件被发送到浏览器。当在浏览器中接收并解释时,HTML被呈现到页面中,Javascript代码执行,请求一个websocket连接返回到R会话的http/websocket服务器。建立连接后,消息可以在R和web浏览器这两个环境之间来回流动。

browserVizBrowserFile <- system. library(BrowserViz)file(package="BrowserViz", "browserCode", "dist", "bvDemoApp.html") PORT_RANGE <- 12111:12120 if(BrowserViz::webBrowserAvailableForTesting()){bvApp <- BrowserViz(browserFile=browserVizBrowserFile, quiet=TRUE) data <- list(小写=字母,大写=字母)json。返回<- roundTripTest(bvApp, data) data。返回<- fromJSON(json.returned) message(sprintf(" %5d bytes交换",nchar(json.returned))) stopifnot(data == data.returned) html <- sprintf("

json编码数据的往返,%d chars

", nchar(json.returned)) displayHTMLInDiv(bvApp, html, "bvDemoDiv")}