很高兴和你相遇
这里正在记录我的所思所学
订阅免费邮件通讯接收最新内容
首页 归档 想法 通讯 播客 工具 简历 关于

使用 VSCode 愉快地进行远程 R 开发

2019 年底(其实也就是半个多月之前)听了 renkun 大神在上海 R 会议的一个分享,分享主题是「Rstudio vs VSCode」,然后他紧接着又写了两篇使用 VSCode 进行 R 开发的博客。仔细了解之后,感觉自己有救了。

之所以这么说,是因为自己一直有个需求得不到很好的满足:在本地方便的开发部署在远程服务器上的 Shiny 应用。

具体一点说,因为我的 Shiny 需要依托一些 Linux 下才能运行的程序,且这些程序对内存有要求,就导致我无法在 Windows 本地使用 WSL 进行测试和开发。而之前使用 VSCode Remote SSH 让本地 VSCode 连接上服务器本身没问题,但是早期 R Console 运行得到的各种结果本身却无法在 VSCode 中方便的查看,总是需要跳出额外的各种窗口。

当然,使用 Rstudio Server 是一个选择,但在实际使用中会有比如单一 session,时常未响应,编辑器各种不顺手等等问题。

随着几位大神的开发加持,现在使用 VSCode 愉快地进行远程 R 语言开发不仅成为了一种可能,而且还非常香,在使用体验上基本不输 Rstudio,而且很多小细节上更加贴心。

为什么要用 VSCode 写 R

大家可能会有一个非常真诚的疑问,Rstudio (server) 它不香吗,写 R 为什么还要用其它编辑器? 下面这张幻灯片来自 renkun 在会议上的分享,基本说明了问题。

就像上图总结的,RStudio 好用,几乎是所有 R 用户的最佳选择。但同时像上文提到的,时不时的无响应带来的各种不稳定,单 session 操作等又让人苦恼。

你可能会有这样的感受,使用 Rstudio 的过程中因为其本身需要一直和服务器保持通信,live R session 和语言服务又无法分离,当 Console 中运行了一个耗时或者耗内存的命令之后,整个 Rstudio 就无法进行任何操作了。

那 VScode 呢?这个编辑器本身的优点不必多说,虽然之前对 R 的支持没那么友好,不过最近几个月在 VSCode 中使用 R 有了重大的体验升级,这主要体现在两个方面。

  1. R Language Server 在后端的加持
  2. vscode-R 插件在前端的重大迭代

R Language Server

首先说 R Language Server,R Language Server 依托于 Language Server Protocol(可以让任何语言在任何编辑器上得到很好的语法支持)。现在的 R Language Server 在 VScode 中已经非常好的支持了多种鼠标悬停内容展示、帮助文档展示、自动补全、文本高亮以及代码格式化等功能。

R Language Server 和 Rstudio 相比差别最大的一点在于前者是真正的静态分析(static analysis),指在不运行程序的条件下,进行程序分析的方法。也就是说所有功能的实现都无需运行代码,对代码进行的分析仅仅依赖代码本身。而且它的语言服务完全脱离于 R session,即便在 R session 非常繁忙的情况下依旧可以提供服务。

接下来仅仅列举几个在 Rstuido 中不是很方便实现或者无法实现的功能。

  • 鼠标悬停即显示函数定义和文档,无论对应的包是否已经加载。(箭头处为鼠标位置,下同)
  • 鼠标悬停在变量上,直接展示变量类型信息

这个就类似于 Rstuido 中 environment 那个小框的功能,但是更方便直观。

  • 自动高亮文档内所有同一变量
  • 选中代码,自动格式化,例如添加空格等。

vscode-R 新增 Session Watcher

vscode-R 插件则在最近的更新中新增了一个 Session Watcher 功能,即便还在测试阶段这个功能也足以让人激动。它实现了在 VSCode 中实时展示各种变量的需求View() 的时候再也不会有各种弹窗了。文字不好描述,直接上图。

  • 查看 data.frame

如下图右,直接查看 data.frame 内容,支持搜索。

  • 展示 ggplot 出图
  • 展示 htmlwidgets

通过 SSH 连接远程服务器

接下来简单介绍如何实现在本地 VScode 中实现远程 R 开发。

首先要实现的自然是远程操作,这里以使用 PC 通过 SSH 连接远程 Linux 服务器为例。

我们默认服务器已经开通了 ssh 服务,然后本地 PC 已经正确安装了 Windows OpenSSH Client。

安装插件 Remote-SSH

然后在命令行面板中找到 Remote-SSH 相关命令,可以直接选择链接服务器,也可以选择打开配置文件。这里我们选择打开配置文件进行简单的配置。

在配置文件中可以输入相应的用户名 IP 地址以及端口等信息。写法如下图所示,写好保存即可。

再选择连接 Host 的命令,就会看到之前我们已经保存好的 Host 选项。

点击对应的 Host,然后输入密码即可。

如果为了方便不想每次都输入密码,可以使用 SSH key 配置服务器和本地的公钥私钥,这里不再展开。

连接成功之后,VSCode 左下角就会显示一个远程连接的标志,同时你还可以直接在 TERMINAL 中打开一个 shell (我用的是 zsh),就像平时使用类似 Xshell 的工具一样直接进行各种操作。

配置 R 语言开发环境

完成了远程连接服务器的工作,接下来是在 Remote 状态下简单进行 R 相关的配置。

首先安装两个必备的插件,R 和 R LSP。然后还需要在服务器的 R 中安装一个 R 包 languageserver。

install.packages("languageserver")

随后在设置界面中进行几个关于 R 的设置。

首先是设置 Linux 下的 R 路径,如果使用系统自带的 R 应该是/usr/bin/R ,如果是使用自己目录下,例如使用 conda 安装的 R 则指定对应的 R 路径。这里推荐使用 Radian 替代 R,所以我的 R 路径就指向了使用 conda 安装的 radian。如下图所示。

如果使用 Radian 的话,则需要勾选 Bracketed Paste 选项。

如果希望使用服务器上的一些 R 配置,例如 .Rprofile 和 .Renviron 文件,那么 Rterm Option 处就不要加什么其它参数,如果不希望使用则可以酌情添加--no-init-file 或者 --no-environ 等参数。

安装插件。在 Rstudio 中路径的自动补全功能非常方便,在 VSCode 中则可以通过插件 Path Autocomplete 来实现这个功能。

至此,就完成了在 VSCode 中使用 R 所需要的一些基本配置,可以开工搬砖。

最终使用效果

直接上截图。

  • 左侧为服务器对应的文件目录,可以直接点击查看编辑
  • 中间是 R 脚本,可以开心的写代码
  • 右边是对应的网页工具,直接查看效果
  • 下面是连接到服务器的终端,可以在 zsh、R 以及 python 等终端任意切换。也可以同时打开多个不同的 R 终端进行不同任务,互不干扰。

扩展资料:


本文作者:思考问题的熊

版权声明:本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。

如果你对这篇文章感兴趣,欢迎通过邮箱或者微信订阅我的 「熊言熊语」会员通讯,我将第一时间与你分享肿瘤生物医药领域最新行业研究进展和我的所思所学所想点此链接即可进行免费订阅。


· 分享链接 https://kaopubear.top/blog/2020-01-08-remotevscoder/