2

RStudio 服务器使用无头 R 会话,并且似乎传递了所有编码的 I/O 操作以节省带宽。这适用于所有东西,除了 Rattle 或 Latticist 之类的包,它们通过自己的 GUI 工作。有没有办法通过 RStudio 服务器使用这些包或以其他方式访问 RStudio 服务器 R 会话以远程运行这些包?

如果有一种有效的方法可以远程运行这些包,而不需要通过 SSH 转发 X 会话,那将是一种奖励。

4

1 回答 1

2

由于这些图形程序的工作方式,我不确定这是否可以通过 RStudio 界面实现。RStudio 很容易为 R 捕获文本输入和输出。捕获正常的图形输出非常令人印象深刻,但这是在 R 中“本机”完成的。甚至包喜欢ggplot2lattice使用内置的 R 绘图功能——它们进行一些渲染和数据处理自行将其传递给grid然后grid通过 R 内置函数在plot()print被调用(包括在交互式会话的 REPL 中隐式调用)。RCommander、RGL 等使用外部库(Tcl/Tk、OpenGL),它们直接在操作系统服务上而不是通过 R 渲染它们的接口。R 甚至看不到这些程序的输出——它只知道 R这些服务的包装函数尚未返回。对于本地 RStudio,这不是问题,因为服务直接转发到本地显示,但对于 RStudio 服务器,没有显示

另一个考虑:假设 R 可以捕获和转发 X,这意味着在您的浏览器中运行一个 X 服务器(在 X 中,服务器是显示器/键盘等,客户端是需要 I/O 的程序)。现代 JavaScript 有时非常惊人,但 X 是一个非常复杂的代码库,并且对延迟非常敏感。在 Internet 上运行 X比在本地网络上运行慢得多——该协议并不是为此类事情设计的,而且大多数操作涉及太多往返。

在更实际的方面,您仍然可以通过 RStudio 完成大部分工作,并且只能通过 X 转发执行图形命令:

  1. 做所有不涉及外部图形界面的事情。
  2. 将您的 R 会话(在环境选项卡中或通过命令行)保存.RData在您的项目目录中。(您实际上可以在其他地方执行此操作,但如果您的工作区保存在工作目录中,通常会更方便。)
  3. 通过 SSH 和 X Forwarding 登录并cd进入项目目录。
  4. 启动 R - R 将自动加载保存为.RData. (您可以使用 禁用此行为--vanilla。根据工作区的大小,R 可能需要几秒钟到几分钟才能加载。
  5. 与 Rattle、Latticist、RCommander、RGL 等一起玩得开心!如果您是通过 Internet 而不是本地网络(见上文)执行此操作,请为巨大的延迟做好准备。
于 2014-06-12T13:22:05.463 回答