R语言中无法对PDB转换的DataFrame使用select()函数的问题
处理PDB文件时的tidyverse语法修正与DataFrame转换问题
首先,你遇到的错误不是PDB文件的特性导致,纯粹是tidyverse函数的用法搞错了:
select()函数的作用是选择数据框的列,而你要筛选chain == "B"的行,应该用filter();- 用管道符
%>%时,不需要在列名前加atom$,直接写列名即可。
正确的筛选代码应该是:
pb1_atom <- atom %>% filter(chain == "B")
关于DataFrame转换的问题:
完全可以把pdb$atom转为标准DataFrame修改后再转回bio3d的pdb对象。as.data.frame(pdb$atom)得到的就是普通的R DataFrame,你可以像处理其他DataFrame一样修改值(比如调整原子坐标、替换残基标识等),修改完成后直接把DataFrame赋值回pdb$atom即可,之后还能正常使用bio3d的函数做后续操作。
举个修改后转回的示例:
# 给B链所有原子的x坐标加1 pb1_atom_modified <- pb1_atom %>% mutate(x = x + 1) # 把修改后的DataFrame放回pdb对象 pdb$atom <- pb1_atom_modified # 保存修改后的PDB文件 write.pdb(pdb, file = "modified_7nhx.pdb")
内容的提问来源于stack exchange,提问作者Emily
相关产品推荐
相关产品推荐

