将“featvec”类对象S4列表转换为数据框

问题描述

我正在尝试使用“rcdk”R 包。我使用 get.fingerprint 函数,type='substructure',fp.mode='count',substructure.pattern=smarts。我得到了一个“featvec”类的对象(它是一个 S4 类对象),理论上可以用“指纹”r 包进行处理。但是,我在指纹包中找不到任何函数来处理此类对象。我有兴趣将此对象的计数转换为数据帧。我被卡住了,因为我有一个此类 S4 对象的列表,这些对象似乎是 S4 对象列表的 S4 对象。我为这听起来太复杂而道歉,对我来说它太复杂了,尽管对其他人来说问题可能非常简单。我尝试使用 unlist、as.data.frame、各种 for 循环(但可能需要三个或四个级别),但设法得到各种错误或其他结果,而不是我想要的。
我提供了这个简单的例子,我想得到一个有 5 列和 6 行的数据框,它是通过对每个列表元素的特征进行 rbind-ing 形成的。:

moli <- c("c1nccc(c1)c1nc([nH]c1c1ccc(F)cc1)c1ccc(cc1)S(=O)C","OC(=O)C[C@H](O)CC(O)COc1c(cc(cc1C(C)C)C(C)C)c1ccc(F)cc1","OP(=O)(O)SCCNCCCN","OC(=O)[C@@H](N)Cc1ccc(O)c(O)c1","c1ccc(cc1)N1N(C(=O)C(C1=O)CCCC)c1ccccc1","Nn1nnc2ccccc12")
mols <- parse.smiles(moli)
smarts <- c("[R]","PCP","[c]","[F]","[I]")
library(rcdk)
fpsmarts <- lapply(mols,get.fingerprint,type='substructure',substructure.pattern=smarts)
fpsmarts
str(fpsmarts)

非常感谢您的帮助。

后期编辑:

我最终设法用双 for 循环解决了它;不是很优雅,但工作。我可能会做得更好,但这是一个有效的开始:

lista_fp <- list() # convert the fingerprints (the count values) to a list of lists
for (i in 1:length(fpsmarts)){
  lista_fp[[i]] <- list()
  for (j in 1:length(fpsmarts[[1]]@features)){
    print(i)
    print(j)
    lista_fp[[i]][[j]] <- fpsmarts[[i]]@features[[j]]@count
  }
}

df_fp <- as.data.frame(matrix(unlist(lista_fp),nrow=length(unlist(lista_fp[1]))))
str(df_fp) # 5 obs of 6 variables,as expected

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)