使用sapply提取KEGGREST列表PATHWAY字段异常,求解决方案
解决KEGGREST提取PATHWAY字段合并为字符串的问题
问题场景
用KEGGREST获取化合物C01546、C05984的信息后,需要提取ENTRY、FORMULA、PATHWAY字段转换为数据框,但PATHWAY字段因包含多元素向量,直接用sapply提取会显示character,3这类标识,无法得到合并后的路径名称字符串。
解决方案代码
library(KEGGREST) # 获取化合物信息 chem_info <- keggGet(dbentries = c("C01546", "C05984")) # 构建目标数据框并处理PATHWAY字段 compound_df <- data.frame( ENTRY = sapply(chem_info, function(x) x$ENTRY), FORMULA = sapply(chem_info, function(x) x$FORMULA), PATHWAY = sapply(chem_info, function(x) { pathways <- x$PATHWAY # 根据路径数量处理格式 switch(as.character(length(pathways)), "0" = "", "1" = pathways, paste(c(paste(pathways[-length(pathways)], collapse = ", "), pathways[length(pathways)]), collapse = ", and ") ) }), stringsAsFactors = FALSE ) # 查看结果 print(compound_df)
代码说明
- 提取ENTRY和FORMULA:通过
sapply遍历chem_info列表,直接提取每个化合物的ENTRY和FORMULA字段,转换为数据框的列。 - 处理PATHWAY合并:自定义函数遍历每个化合物的PATHWAY向量:
- 若没有路径,返回空字符串;
- 若只有一条路径,直接返回该路径名称;
- 若有多条路径,将前n-1条用逗号分隔,最后一条用", and "连接,符合需求的格式。
- 解决原代码问题:原代码直接用
[[7]]提取PATHWAY时,因不同化合物的PATHWAY长度不同,sapply会返回列表,导致数据框列显示异常;通过合并字符串,将列表元素统一为单个字符值,彻底解决显示问题。
内容的提问来源于stack exchange,提问作者Purrsia
相关产品推荐
相关产品推荐

