How to run a AR query for multiple arguments of a table or list (lets say we have a column with IDs) in R

huangapple go评论55阅读模式
英文:

How to run a AR query for multiple arguments of a table or list (lets say we have a column with IDs) in R

问题

Install relevant library for HTTP requests

library(httr)

Set gene_id variable for AR (androgen receptor)

gene_id <- "ENSG00000169083"

Build query string to get general information about AR and genetic constraint and tractability assessments

query_string = "
query target($ensemblId: String!){
target(ensemblId: $ensemblId){
id
approvedSymbol
biotype
geneticConstraint {
constraintType
exp
obs
score
oe
oeLower
oeUpper
}
tractability {
id
modality
value
}
}
}
"

Set base URL of GraphQL API endpoint

base_url <- "https://api.platform.opentargets.org/api/v4/graphql"

Set variables object of arguments to be passed to endpoint

variables <- list("ensemblId" = gene_id)

Construct POST request body object with query string and variables

post_body <- list(query = query_string, variables = variables)

Perform POST request

r <- POST(url=base_url, body=post_body, encode='json')

Print data to RStudio console

print(content(r)$data)

英文:

How to modify this script to read form a list of IDs and return the results ?

# Install relevant library for HTTP requests
library(httr)

# Set gene_id variable for AR (androgen receptor)
gene_id &lt;- &quot;ENSG00000169083&quot;

# Build query string to get general information about AR and genetic constraint and tractability assessments 
query_string = &quot;
  query target($ensemblId: String!){
    target(ensemblId: $ensemblId){
      id
      approvedSymbol
      biotype
      geneticConstraint {
        constraintType
        exp
        obs
        score
        oe
        oeLower
        oeUpper
      }
      tractability {
        id
        modality
        value
      }
    }
  }
&quot;

# Set base URL of GraphQL API endpoint
base_url &lt;- &quot;https://api.platform.opentargets.org/api/v4/graphql&quot;

# Set variables object of arguments to be passed to endpoint
variables &lt;- list(&quot;ensemblId&quot; = gene_id)

# Construct POST request body object with query string and variables
post_body &lt;- list(query = query_string, variables = variables)

# Perform POST request
r &lt;- POST(url=base_url, body=post_body, encode=&#39;json&#39;)

# Print data to RStudio console
print(content(r)$data)

I tried just a simple query from the documentation of Open Targets. Their graphQL API doesn't support multiple IDs.

答案1

得分: 0

遍历多个 ID 可能会像这样完成:

IDs <- c("ENSG00000169083", "ENSG00000169084", ...)
alldata <- lapply(IDs, function(gene_id) {
  post_body <- list(query = query_string, variables = list("ensemblId" = gene_id))
  res <- tryCatch(
    POST(url=base_url, body=post_body, encode='json'),
    error = function(e) e)
  if (inherits(res, "error")) {
    warning("基因", sQuote(gene_id, FALSE), "出错: ",
            conditionMessage(res), call. = FALSE)
    res <- NULL
  } else if (status_code(res) != 200) {
    warning("基因", sQuote(gene_id, FALSE), "返回异常: ",
            status_code(res), call. = FALSE)
    res <- NULL
  } else {
    res <- content(res)$data
  }
  res
})

从这里开始,你应该有一个包含每个 ID 一个元素的列表,然后你可以组合数据(使用 rbindbind_rowsrbindlist,或者可能使用一些特定于列表的方法)。

英文:

Iterating over multiple IDs might be done like this:

IDs &lt;- c(&quot;ENSG00000169083&quot;, &quot;ENSG00000169084&quot;, ...)
alldata &lt;- lapply(IDs, function(gene_id) {
  post_body &lt;- list(query = query_string, variables = list(&quot;ensemblId&quot; = gene_id))
  res &lt;- tryCatch(
    POST(url=base_url, body=post_body, encode=&#39;json&#39;),
    error = function(e) e)
  if (inherits(res, &quot;error&quot;)) {
    warning(&quot;error for gene &quot;, sQuote(gene_id, FALSE), &quot;: &quot;,
            conditionMessage(res), call. = FALSE)
    res &lt;- NULL
  } else if (status_code(res) != 200) {
    warning(&quot;abnormal return for gene &quot;, sQuote(gene_id, FALSE), &quot;: &quot;,
            status_code(res), call. = FALSE)
    res &lt;- NULL
  } else {
    res &lt;- content(res)$data
  }
  res
})

From here, you should have a list with one element per ID, over to you on combining the data (whether rbind, bind_rows, rbindlist, or something list-specific perhaps).

huangapple
  • 本文由 发表于 2023年3月31日 18:16:27
  • 转载请务必保留本文链接:https://go.coder-hub.com/75897371.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定