使用R从Uniprot获取异构体完整序列的技术求助
解决Uniprot登录号获取异构体完整序列的问题
UniprotR的GetSequences函数默认返回的是异构体相对于主转录本的差异片段,而非完整序列。要获取每个异构体的完整序列,可通过以下两种方式实现:
方法1:直接调用Uniprot API获取完整序列
直接请求Uniprot REST API,指定返回异构体ID和完整序列字段,无需手动拼接:
library(httr) library(jsonlite) accession_numbers <- c('P42226','Q13233','Q495A1','P55285') # 构建API请求,指定返回accession、isoformId和完整sequence字段 url <- paste0( "https://rest.uniprot.org/uniprotkb/accessions?accessions=", paste(accession_numbers, collapse = ","), "&fields=accession,isoformId,sequence&format=json" ) # 发送请求并解析JSON结果 response <- GET(url) parsed_data <- fromJSON(content(response, "text")) # 整理成目标格式:Accession、Isoform_ID、Full_Sequence isoform_full_seqs <- lapply(parsed_data$results, function(entry) { if (!is.null(entry$isoforms)) { # 处理存在异构体的条目 data.frame( Accession = entry$accession, Isoform_ID = entry$isoforms$id, Full_Sequence = entry$isoforms$sequence$value, stringsAsFactors = FALSE ) } else { # 无异构体的条目,返回主序列 data.frame( Accession = entry$accession, Isoform_ID = entry$accession, Full_Sequence = entry$sequence$value, stringsAsFactors = FALSE ) } }) # 合并所有结果 final_df <- do.call(rbind, isoform_full_seqs) print(final_df)
方法2:基于UniprotR拼接主序列与可变片段
如果仍想使用UniprotR,可先获取主序列,再结合异构体的可变区域信息拼接出完整序列:
library(UniprotR) accession_numbers <- c('P42226','Q13233','Q495A1','P55285') # 获取主序列(非异构体) main_seqs <- GetSequences(accession_numbers, Isoform = FALSE) main_seq_dict <- setNames(main_seqs$Sequence, main_seqs$Entry) # 获取异构体的可变区域信息 isoform_var_info <- GetIsoformSequence(accession_numbers) # 拼接完整序列 isoform_full_seqs <- lapply(1:nrow(isoform_var_info), function(i) { entry_id <- isoform_var_info$Entry[i] main_seq <- main_seq_dict[entry_id] var_start <- isoform_var_info$Start[i] var_end <- isoform_var_info$End[i] var_seq <- isoform_var_info$Sequence[i] # 替换主序列的可变区域得到完整异构体序列 full_seq <- paste0( substr(main_seq, 1, var_start - 1), var_seq, substr(main_seq, var_end + 1, nchar(main_seq)) ) data.frame( Accession = entry_id, Isoform_ID = isoform_var_info$Isoform[i], Full_Sequence = full_seq, stringsAsFactors = FALSE ) }) final_df <- do.call(rbind, isoform_full_seqs) print(final_df)
注意事项
- 部分异构体可能是N端延长、C端延长或内部替换,方法2的拼接逻辑已覆盖常见情况,若遇到特殊可变类型需微调代码。
- Uniprot API有请求频率限制,批量查询时建议添加适当延迟,避免被限流。
内容的提问来源于stack exchange,提问作者John H
相关产品推荐
相关产品推荐

