You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:20:03