Swiss-Model是啥?
来自说明文档的介绍:
SWISS-MODEL is a web-based integrated service dedicated to protein structure homology modelling. It guides the user in building protein homology models at different levels of complexity.
Building a homology model comprises four main steps: (i) identification of structural template(s), (ii) alignment of target sequence and template structure(s), (iii) model-building, and (iv) model quality evaluation. These steps require specialised software and integrate up-to-date protein sequence and structure databases. Each of the above steps can be repeated interactively until a satisfying modelling result is achieved.
使用很简单,Web Sever里贴序列就行:

为什么要写个R包?
上实验课,要使用Swiss-Model进行蛋白质建模,其它的操作都在R里可以搞,但这一步,得到网页上来弄,再把结果下载下来,又回到R。就想问自己一个问题:能不能装逼装全套?于是就着手写一个R包。
安装
yulab.utils::install_zip_gh("YuLab-SMU/swissmodel")设置
首先是需要一个API token,注册了在账号里就可以看到:

然后加载swissmodel包,用set_swissmodel_token函数设置即可。
library(swissmodel)
set_swissmodel_token("YOUR_SWISSMODEL_TOKEN")建模
首先你得有序列吧:
hemoglobin_sequence <- "VLSPADKTNVKAAWAKVGNHAADFGAEALERMFMSFPSTKTYFSHFDLGHNSTQVKGHGKKVADALTKAVGHLDTLPDALSDLSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPGDFTPSVHASLDKFLASVSTVLTSKYR"然后建模直接是写成一个workflow,所以你只要跑这一句代码就行:
result <- run_automodel_workflow(hemoglobin_sequence)然后就是等,期间函数打印出来的信息如下:
Starting automodel workflow...
AUTOMODEL task submitted successfully!
Project ID: 25f307
Project status: INITIALISED [Waited: 0 seconds]
Project status: RUNNING [Waited: 32 seconds]
Project status: RUNNING [Waited: 63 seconds]
Project status: RUNNING [Waited: 95 seconds]
Project status: RUNNING [Waited: 127 seconds]
Project status: RUNNING [Waited: 158 seconds]
Project status: RUNNING [Waited: 189 seconds]
Project status: RUNNING [Waited: 220 seconds]
Project status: RUNNING [Waited: 251 seconds]
Project status: RUNNING [Waited: 282 seconds]
Project status: COMPLETED [Waited: 313 seconds]
Modeling completed successfully!
File downloaded successfully: ./modeling_results/25f307_model_1.pdb
File downloaded successfully: ./modeling_results/25f307_model_2.pdb这个workflow包含了几步:
-
创建一个输出的文件夹,默认
./modeling_results -
提交序列,得到一个项目ID
-
检查这个项目的状态
-
当项目完成之后,拿到结果的URL
-
下载文件
-
返回运行整个workflow的一些相关信息
result里记录了相关的信息,结果如下:
> result
$project_id
[1] "25f307"
$status
[1] "COMPLETED"
$downloaded_files
$downloaded_files$model_1
[1] "./modeling_results/25f307_model_1.pdb"
$downloaded_files$model_2
[1] "./modeling_results/25f307_model_2.pdb"
$project_info_file
[1] "./modeling_results/25f307_info.json"这些信息也会被写入json文件,这样你退出R之后,这些信息都是有保留的。这个json文件的信息很容易读进来:
> jsonlite::fromJSON(result$project_info_file)
$project_id
[1] "25f307"
$status
[1] "COMPLETED"
$models
model_id status gmqe coordinates_url modelcif_url avg_local_score
1 01 COMPLETED 0.98 https://swissmodel.expasy.org/project/25f307/models/01.pdb.gz https://swissmodel.expasy.org/project/25f307/models/01.cif.gz NA
2 02 COMPLETED 0.90 https://swissmodel.expasy.org/project/25f307/models/02.pdb.gz https://swissmodel.expasy.org/project/25f307/models/02.cif.gz 0.85
$date_created
[1] "2025-11-10T05:54:31.192032Z"
$project_title
[1] "R Automodel"
$view_url
[1] "https://swissmodel.expasy.org/project/25f307/view"这个view_url点开之后,也可以到Swiss-Model网站上看结果:

所以一个流程,完事了。建模完成的pdb文件已经下载到了本地,我们可以在R里读取。
这个R包到这里,应该说就完成了开头说的,要在R里用Swiss-Model的使命。演示的这个流程,里面每一步都是可以单独运行的,函数都是分开并且是export的。
蛋白结构初印象
我还继续写了一些简单的函数,可以做一些简单的分析。
首先读取PDB文件,调用了bio3d包的read.pdb:
> pdb = read.pdb(result$downloaded_files[[1]])然后你可以用summary来看这个对象的一些信息:
> summary(pdb)
Call: read.pdb(file = result$downloaded_files[[1]])
Total Models#: 1
Total Atoms#: 1076, XYZs#: 3228 Chains#: 1 (values: A)
Protein Atoms#: 1076 (residues/Calpha atoms#: 141)
Nucleic acid Atoms#: 0 (residues/phosphate atoms#: 0)
Non-protein/nucleic Atoms#: 0 (residues: 0)
Non-protein/nucleic resid values: [ none ]
+ attr: atom, xyz, calpha, call在swissmodel包里,也提供了其它一些函数,包括pdb_info():
> pdb_info(pdb)
Protein Structure Information:
- Atoms: 1076
- Residues: 141
- Chains: A
- Model dimensions (<c3><85>):
X: 43.88
Y: 27.32
Z: 41.17
$atoms
[1] 1076
$residues
[1] 141
$chains
[1] "A"
$dimensions
x y z
43.883 27.317 41.168 以及analyze_model_quality():
> analyze_model_quality(pdb)
$atoms
[1] 1076
$residues
[1] 141
$chains
[1] "A"
$resolution
[1] NA
$rama_favored
[1] 79.28571
$rama_allowed
[1] 9.285714
$rama_outliers
[1] 11.42857它会计算拉式图的一些参数:
-
Ramachandran Favored(最允许区域):这些区域对应的φ和ψ二面角组合在立体化学上是最允许的,通常对应于蛋白质中常见的二级结构,如α-螺旋和β-折叠。这些区域内的残基构象在能量上是有利的,且没有原子间的空间冲突。
-
Ramachandran Allowed(允许区域):这些区域对应的φ和ψ二面角组合在立体化学上是允许的,但可能不如最允许区域那么理想。这些区域内的残基构象在能量上可能是可接受的,但可能不如最允许区域稳定。
-
Ramachandran Outliers(异常区域):这些区域对应的φ和ψ二面角组合在立体化学上是不允许的,因为它们会导致原子间的空间冲突或能量上不利的构象。出现在这些区域的残基可能表示该残基的构象存在问题,例如在蛋白质结构建模或测定中可能出现了错误。
画图
拉式图(Ramachandran图)来评估蛋白质结构中氨基酸残基的构象是否合理。Ramachandran图是根据蛋白质中每个非末端氨基酸残基的φ和ψ二面角绘制的散点图。这些二面角决定了蛋白质主链的构象。
也是一条指令:
plot_ramachandran(pdb)
还可以画一下残基的组成:
plot_residue_composition(pdb)
最后呢,三维结构不画三维怎么行,还是一条指令:
plot_pdb(pdb)
这里调用了以前介绍的R包r3dmol。
对于这些结构简单分析和画图函数,也封装成一个流程,只需要跑run_pdb_analysis()一个函数,就会将这些分析全部跑一遍,然后分别写入文件。