使用RDKIT时出现object is not iterable错误
When using RDKIT, object is not iterable error appears
我正在尝试使用 tanimoto 相似性来比较使用 rdkit 的分子指纹。我正在尝试将列表 1 中的两项与列表 2 中的一项进行比较。但是,我收到错误消息。我不明白,因为我的代码中有任何名为“Mol”的东西。有人有建议吗?谢谢
from rdkit import Chem
from rdkit.Chem import rdFingerprintGenerator
from rdkit.Chem import DataStructs
mol1 = ('CCO', 'CCOO')
mol2 = ('CC')
fii = Chem.MolFromSmiles(mol2)
fpgen1 = rdFingerprintGenerator.GetMorganGenerator(radius=2)
fps1 = [fpgen1.GetFingerprint(m) for m in fii]
for m in mol1:
fi = Chem.MolFromSmiles(m)
fpgen2 = rdFingerprintGenerator.GetMorganGenerator(radius=2)
fps2 = [fpgen2.GetFingerprint(m) for m in fi]
for x in fsp2:
t = DataStructs.TanimotoSimilarity(fps1, fps2(x))
print(t)
错误:
fps1 = [fpgen1.GetFingerprint(m) for m in fii]
类型错误:'Mol' 对象不可迭代
Mol
对象是调用 Chem.MolFromSmiles
时返回的 rdkit class 的名称,而不是您的变量名称之一。
- 错误说
Mol
对象不可迭代(它是单个分子)
from rdkit import Chem
from rdkit.Chem import rdFingerprintGenerator
from rdkit.Chem import DataStructs
smiles1 = ('CCO', 'CCOO')
smiles2 = ('CC',)
mols1 = [Chem.MolFromSmiles(smi) for smi in smiles1]
mols2 = [Chem.MolFromSmiles(smi) for smi in smiles2]
# you only need to instantiate the generator once, you can use it for both lists
fpgen = rdFingerprintGenerator.GetMorganGenerator(radius=2)
fps1 = [fpgen.GetFingerprint(m) for m in mols1]
fps2 = [fpgen.GetFingerprint(m) for m in mols2]
# if you only care about the single entry in fps2 you can just index it
for n, fp in enumerate(fps1):
t = DataStructs.TanimotoSimilarity(fp, fps2[0])
print(n, t)
我正在尝试使用 tanimoto 相似性来比较使用 rdkit 的分子指纹。我正在尝试将列表 1 中的两项与列表 2 中的一项进行比较。但是,我收到错误消息。我不明白,因为我的代码中有任何名为“Mol”的东西。有人有建议吗?谢谢
from rdkit import Chem
from rdkit.Chem import rdFingerprintGenerator
from rdkit.Chem import DataStructs
mol1 = ('CCO', 'CCOO')
mol2 = ('CC')
fii = Chem.MolFromSmiles(mol2)
fpgen1 = rdFingerprintGenerator.GetMorganGenerator(radius=2)
fps1 = [fpgen1.GetFingerprint(m) for m in fii]
for m in mol1:
fi = Chem.MolFromSmiles(m)
fpgen2 = rdFingerprintGenerator.GetMorganGenerator(radius=2)
fps2 = [fpgen2.GetFingerprint(m) for m in fi]
for x in fsp2:
t = DataStructs.TanimotoSimilarity(fps1, fps2(x))
print(t)
错误: fps1 = [fpgen1.GetFingerprint(m) for m in fii] 类型错误:'Mol' 对象不可迭代
Mol
对象是调用Chem.MolFromSmiles
时返回的 rdkit class 的名称,而不是您的变量名称之一。- 错误说
Mol
对象不可迭代(它是单个分子)
from rdkit import Chem
from rdkit.Chem import rdFingerprintGenerator
from rdkit.Chem import DataStructs
smiles1 = ('CCO', 'CCOO')
smiles2 = ('CC',)
mols1 = [Chem.MolFromSmiles(smi) for smi in smiles1]
mols2 = [Chem.MolFromSmiles(smi) for smi in smiles2]
# you only need to instantiate the generator once, you can use it for both lists
fpgen = rdFingerprintGenerator.GetMorganGenerator(radius=2)
fps1 = [fpgen.GetFingerprint(m) for m in mols1]
fps2 = [fpgen.GetFingerprint(m) for m in mols2]
# if you only care about the single entry in fps2 you can just index it
for n, fp in enumerate(fps1):
t = DataStructs.TanimotoSimilarity(fp, fps2[0])
print(n, t)