Skip to contents

这里使用 E. coli 作为示例,展示如何调用 BioCyc 进行富集分析。

建立会话

使用 biocyc.org 需要登录,因此需要首先建立会话(biocyc_session())。这个会话会保存用户的登录信息,并用于后续的调用。这里使用了环境变量中的用户名和密码进行登录。为了避免密码泄露,建议将用户名和密码保存在环境变量中,而不是直接在代码中写明。

session = biocyc_session(
  Sys.getenv("BIOCYC_USERNAME"), 
  Sys.getenv("BIOCYC_PASSWORD")
)

获取所有基因

biocyc_get_all() 函数用于获取指定物种的所有基因。这里以 E. coli 为例。获取基因实际上是拷贝了一个包含所有基因的 Smart Table。

# 获取所有基因
all_genes = biocyc_get_all(
  session = session, 
  orgid = "ECOLI", 
  type = "Genes"
)
all_genes

创建智能表

biocyc_create_smart_table() 函数用于创建智能表。这里创建了一个包含前 30 个基因 ID 的 Smart Table,并返回了该 Smart Table 的 ID。

# 创建智能表
selected_genes = all_genes[[1]][1:30]
smart_table_id = biocyc_create_smart_table(
  session = session, 
  orgid = "ECOLI", 
  type = "Genes", 
  values = selected_genes
)

获取智能表

biocyc_get_smart_table() 函数用于获取智能表。这里获取了刚刚创建的智能表,并将其格式设置为 TSV。现在的 Smart Table 中可能只有一个列,即 ID 列。

smart_table = biocyc_get_smart_table(
  session = session, 
  table_id = smart_table_id, 
  format = "tsv"
)
smart_table

运行富集分析

将 Smart Table 中保存的基因提交,进行富集分析。富集分析会生成一个新的 Smart Table。并在这个新生成的 Smart Table 中保存富集到的代谢通路或 GO 条目。

enrichment_result_id = biocyc_enrichment(
  session = session, 
  method = "GET",
  table_id = smart_table_id, 
  key = "enrich-genes-pwys",
  type = "enrichment",
  threshold = 0.1,
  statistic = "fisher-exact",
  correction = "none"
)
enrichment_result = biocyc_get_enrichment_result(
  session = session, 
  enrichment_result_id = enrichment_result_id
)
enrichment_result

添加属性列

所有新建的 Smart Table 默认只有一列,即 ID 列。为了给 Smart Table 中加入更多有用的信息,用户可以使用 biocyc_add_property_column() 函数为 Smart Table 添加更多的列。

# 添加属性列
biocyc_add_property_column(
  session = session, 
  table_id = enrichment_result_id, 
  property_id = c("COMMON-NAME", "REACTION-LIST"), 
  index = 0
)

# 重新获取富集分析结果
enrichment_result2 = biocyc_get_enrichment_result(
  session = session, 
  enrichment_result_id = enrichment_result_id
)

# 新获取的富集分析结果中已经添加了属性列
enrichment_result2

或者使用 biocyc_transform() 函数对 Smart Table 进行转换。将 pathway 中包含的基因添加到 Smart Table 中。通路中包含的多个反应或者基因之间使用 // 分隔。

# 将 pathway 中包含的基因添加到 Smart Table 中
biocyc_transform(
  session = session, 
  table_id = enrichment_result_id, 
  transform_id = "pwy-genes", 
  index = 0
)

# 重新获取富集分析结果
enrichment_result3 = biocyc_get_enrichment_result(
  session = session, 
  enrichment_result_id = enrichment_result_id
)

# 新获取的富集分析结果中已经添加了 pathway 中包含的基因
enrichment_result3

transform_id 是转换操作的唯一标识符。用户可以通过软件包内置的数据集 transformations 获取所有可用的转换操作。下面是针对 pathway 所有可以使用的转换操作。

# 查看针对 pathway 所有可以使用的转换操作
transformations |> dplyr::filter(stringr::str_detect(id, "pwy"))

也可以针对 selected gene 进行转换,获取更多信息。

# 查看针对 gene 所有可以使用的转换操作
transformations |> dplyr::filter(stringr::str_starts(id, "gene"))

# 添加 gene accession,transcriptional regulator,pathway,reaction 列
biocyc_transform(
  session = session, 
  table_id = smart_table_id, 
  transform_id = "gene-accession", 
  index = 0
)
biocyc_transform(
  session = session, 
  table_id = smart_table_id, 
  transform_id = "gene-tfs", 
  index = 0
)
biocyc_transform(
  session = session, 
  table_id = smart_table_id, 
  transform_id = "gene-pwys", 
  index = 0
)
biocyc_transform(
  session = session, 
  table_id = smart_table_id, 
  transform_id = "gene-rxns", 
  index = 0
)
smart_table2 = biocyc_get_smart_table(
  session = session, 
  table_id = smart_table_id, 
  format = "tsv"
)
smart_table2

查看并添加与 gene 相关的列。

properties |> dplyr::filter(stringr::str_detect(description, "gene"))

# 添加 common-name,product,accession-1,names,last-update,regulated-by 列
biocyc_add_property_column(
  session = session, 
  table_id = smart_table_id, 
  property_id = c("common-name", "product", "accession-1", "names", "last-update", "regulated-by")
)
smart_table3 = biocyc_get_smart_table(
  session = session, 
  table_id = smart_table_id, 
  format = "tsv"
)
smart_table3

删除富集分析结果

使用 biocyc_delete_smart_table() 函数删除 Smart Table。富集结果也是一个 Smart Table,因此也可以使用该函数删除。

# 删除富集分析结果
biocyc_delete_smart_table(
  session = session, 
  table_id = enrichment_result_id
)

# 删除智能表
biocyc_delete_smart_table(
  session = session, 
  table_id = smart_table_id
)