俗话说,工欲善其事必先利其器,想要做好生信数据分析,得有一些好用的工具才行。
由于生信分析经常用的编程语言是shell、python和R语言,而vscode(Visual Studio Code)是一款非常好用的编程语言编辑器,可以编辑几乎所有编程语言的脚本、可以远程连接服务器、可以预览各种格式的图片等,因此强烈推荐大家使用vscode进行脚本编辑与数据分析。
然而初始版本的vscode不是很好用,不像pycharm或rstudio一样安装以后就有丰富的功能,但是vscode的可配置性非常高,有许多非常强大的插件,下面分享几款我常用的数据分析插件,这几款插件可以让vscode用起来更加顺手,大大提升生信分析效率。
默认的vscode并没有对shell脚本的语法检查,这就导致有时候写出来的shell脚本可能存在一些潜在的错误,这些错误只有在运行的时候才能被发现。
下面推荐的这款插件叫做ShellCheck,它可以检查shell脚本的语法是否存在问题、变量是否被定义及使用等,并针对潜在的问题进行介绍及给出可以替换的解决方法,从而可以提前避免潜在的问题。此外,这款插件也会对一些代码给出优化建议,从而写出更加优雅的shell脚本。
下面基于一个示例来介绍它的提示。
如下图所示,我写了两行命令来输出一个字符串,而shellcheck检测到这个脚本存在一个问题(见PROBLEMS panel),
点击该问题的链接(点击SC2148)即可跳转到shellcheck对这个问题的详细解释及解决方法:
解决方法就是在脚本开头添加一行shebang,即脚本中第一行必须以#!
开头的代码,其作用是指定执行本脚本的程序路径,例如一般的shell脚本会指定#!/bin/bash
,这样当将该脚本作为可执行文件运行该脚本时,相当于调用/bin/bash
程序来运行该脚本。
下面举个例子来说明一下上述两种运行方式。
假如我有一个shell脚本名为a.sh,其内容如下:
echo "Hello, Shell"
通常情况下运行该脚本的方式是使用bash来执行,如下:
$ bash a.sh # $是shell的命令行提示符,表示运行在终端
Hello, Shell # 输出结果
接下来使用chmod +x a.sh
命令将该脚本改为可执行文件,然后在脚本开头添加一行shebang,即#!/bin/bash
,现在便可以将a.sh脚本作为一个可执行文件来运行了:
$ ./a.sh
Hello, Shell
这种方式属于直接运行可执行文件,它省略了前面的bash,但是由于在脚本开头添加了shebang,因此这种方式会调用/bin/bash
程序来执行a.sh
脚本,其等价于bash a.sh
。
除了手动修改脚本以外,ShellCheck还提供了一个自动修改存在问题的代码的命令,使用方式:按ctrl+shift+P
调出vscode的Command Palette
,然后输入Fix All
,点击回车即可,如下图所示:
需要注意的是这种方式并不能修改所有的具有潜在问题的代码,例如上面提到的需要在脚本开头添加shebang的这个需求它就无法实现,建议大家在使用时先运行Fix All
将可以修改的代码自动修改,然后再手动修改那些它无法修改的脚本。
R语言是生信分析必不可少的编程语言,而比较成熟的R语言环境主要是RStudio。
经过一些简单的配置,vscode也可以像RStudio一样一行一行运行R命令、自动补全R变量、查看R函数的帮助文档、显示R变量的值并且显示R语言的绘图结果。此外vscode可以远程连接服务器,这就使得可以在服务器上进行R脚本的开发,然而使用RStudio连接服务器的话主要是通过RStudio server,需要所在服务器的管理员配置才可以,个人用户(无root权限)是无法配置的。
在vscode中使用R的具体配置过程请参考vscode的官方文档:R in Visual Studio Code ,另外网上也有许多相关教程。如果需要具体配置过程请在文末留言,我会单独出一篇文章来介绍每一步的操作。
这里我列一下需要安装的插件和R包:
jsonlite
, rlang
, languageserver
, httpgd
, lintr
这些包基本都可以通过CRAN安装,如若不能,请使用remotes::install_github
命令从它们对应的Github地址安装下面我展示一下配置好环境以后运行R
的效果。
点击了那个符号(View)以后会调出一个单独的窗口来显示变量的值。
除了这些,vscode中的R环境还有很多其他的功能,请大家自行探索,相信你一定会被惊讶到!
Python的重要性就不用多说了,现在基本许多领域都有python的一席之地,在生信领域也有很多软件是用python语言写的,因此了解并熟练使用python语言是提高生信分析效率的重要手段。
在vscode中交互式运行python代码需要安装三个插件,即Python、Pylance和Jupyter:
具体配置过程请参考vscode官方文档:https://code.visualstudio.com/docs/languages/python 和 https://code.visualstudio.com/docs/python/run
下面来介绍一下配置好python环境以后如何使用。
第一:python插件会自动检测电脑上安装的python环境,包括使用conda创建的环境,步骤如下:
第二:python插件允许交互式运行python代码,并且可选中某一行单独运行,步骤如下:
#%%
符号,该符号表示当前代码成为了一个单元格(cell),每次运行ctrl+enter会运行一个单元格中的代码,其运行结果会在一个单独的交互式窗口中显示,如下图所示:如果在单元格内运行快捷键shift+enter,那么也会运行该单元格的代码,并生成一个新的单元格;而ctrl+enter只会运行该单元格的代码,不会生成一个新的单元格
有两种方式单独运行某一行的代码:
方式1:选中该行代码,然后右键选择 Run in Interactive Window → Run Selection/Line in Interactive Window即可,如下图所示:
方式2:选中该行代码,使用快捷键shift+enter即可
第三:借助python
及Jupyter
插件可以在vscode中运行jupyter notebook脚本(文件后缀为.ipynb
),步骤如下:
创建一个后缀为.ipynb
的文件,然后直接用vscode
打开,它会自动调用Jupyter
插件进行识别
输入几行代码,然后按shift+enter
运行单个单元格内的脚本,会弹出窗口选择合适的python
环境
选择好环境以后就可以在每个单元格下面看到运行结果了,如下图所示:
生信分析经常会处理大量数据,例如测序原始数据(fastq)、比对后的数据(bam)等,这些数据量非常大,肯定不能在自己的个人笔记本电脑上处理,因此通常会在服务器上处理这些数据。
连接服务器的软件非常多,比较好用的有XShell和MobaXterm,这两个都有免费版可用。
但是这些软件有一个问题,即它们只有终端(terminal)界面,在终端上编辑脚本并测试是很麻烦的一件事情。
好在有了vscode以后,只需要安装一个插件,即Remote - SSH,在服务器端写脚本并测试将变得非常顺利,并且也可以在服务器端使用前面提到的Shell、R和Python插件,写脚本的效率将有显著提升!
Remote - SSH插件如下:
具体配置过程请参考vscode官方文档:https://code.visualstudio.com/docs/remote/ssh
当安装好该插件以后,重启vscode,最左边会出现一个Remote Explorer的图标,点击该图标,然后点击SSH右边的Setting图标,即可打开远程登录服务器的配置文件,上述步骤如下:
打开该文件以后,需要在其中输入远程服务器的IP及端口号:
Host myserver # 这个是服务器名称,起一个自己好记的名字就行
HostName server.ip # 这个是服务器IP地址
User username # 自己在该服务器的账户名称
Port 222 # 这个是服务器的端口号,若不指明端口号,则默认是22
保存该文件,点击刷新图标,即可看到刚定义的远程服务器名称:
接下来点击myserver右边的打开图标,即可新开一个窗口来连接服务器:
最后在新开的窗口中输入密码即可。
需要注意的是,在vscode中本地的插件和远程的插件是独立的,当远程连接服务器以后,需要单独在服务器端安装本地已经安装过的插件才可以在服务器上使用这些插件。
最后分享几个在vscode查看常用文件的插件,这些文件包括csv、excel、pdf、html、markdown等。
csv文件全称是Comma Separated Values,是一种纯文本文件,但是每一列的分隔符是逗号(,
),如下所示:
这样的格式使用纯文本编辑器编辑的话会比较混乱,而excel可以打开csv文件进行编辑。
此外,vscode的Edit csv
插件可以将这种文件转成一种类似excel一样的格式,查阅和编辑都会更加方便:
使用该插件查阅csv文件的步骤如下:
点击Edit csv以后的界面如下:
该界面最上面还有一些选项可以用来对该文件进行操作,当操作完成后记得点击 “changes to file and save”,这样源文件才会得到相应的修改。
一般来说服务器上没有可视化界面,无法直接打开excel文件,所以通常做法是将excel文件下载到本地再进行打开查看,但这样就多了一个文件传输过程,并且下载到本地的文件也需要建立一个文件夹进行管理,复杂度进一步提升!
得益于vscode强大的插件系统,现在也可以在vscode中查看excel文件了!并且还可以进行简单的编辑,有了该插件以后,将可以直接在服务器端查阅excel文件,而无需下载到本地!
这里我安装的插件叫做Excel Viewer,如下图所示:
使用方法也非常简单,直接双击打开一个excel文件即可,它会自动将excel文件转成下图的table格式:
和上面excel文件一样,服务器上也无法直接查看PDF文件,只能将PDF文件下载到本地再进行查看。
而vscode中有许多插件可以查阅PDF文件,这里我用的是vscode-pdf
插件:
安装好该插件以后,双击打开一个PDF文件即可预览,如下:
有了该插件以后,就可以直接在服务器上用vscode查看PDF文件了!再也不用下载到本地才能看到PDF内容了!
这个需求来源于在服务器端将Rmd
文件导出为html
以后,往往需要将html
文件下载到本地才能查看,这就很不方便对脚本的修改优化,因为多了一个下载步骤,因此在vscode上直接预览html
文件是非常必要的!
这里我用到的插件是HTML Preview
,如下所示:
使用方法比较简单,打开一个html文件以后,点击右边预览图标:
随后会打开一个新的窗口显示html
文件的内容,如下:
这里我用的插件是Markdown All in One
,如图所示:
该插件允许对Markdown文件进行编辑、预览等操作,有了该插件以后,就可以直接在服务器端使用vscode编辑Markdown文件了!
该插件预览Markdown文件的用法也比较简单,和上面预览html文件一样,首先打开一个Markdown文件,然后点击右边的预览图标即可,步骤如下:
预览结果如下图: