我有一个一般性问题,我认为这可以归结为某种范围界定问题。
以下是利用biomaRt的getSequence()函数的公式的摘要。用户输入自定义功能(1)基因名称,以及可选的(2)上游要导入的碱基对数量。
# Load libraries
library(biomaRt)
# Let's make a custom "getSequence" function
getUpstream <- function(x, bp.upstream = 50){
bp.upstream <- bp.upstream
ensembl <- useMart("ensembl", dataset = "hsapiens_gene_ensembl")
upstream.master <- NULL
for(i in x){
upstream.i <- getSequence(id = i,
type = "hgnc_symbol",
seqType = "coding_gene_flank",
upstream = bp.upstream,
mart = ensembl
)
upstream.master <- rbind(upstream.master, upstream.i)
}
return(upstream.master)
}
假设我使用此功能运行搜索,但未指定上游碱基对的数量,例如:
getUpstream("NOTCH4")
出乎意料的是,如果没有以下行,该函数将无法正常工作:
bp.upstream <- bp.upstream
其他行,如print(bb.upstream)也会使代码正常工作。
我以为bp.upstream会在调用函数时定义,因此一旦调用getSequence就会将上游设置为50。谁能帮我理解为什么不呢?
这里是一种避免范围问题的解决方法。
# Load libraries
library(biomaRt)
# Let's make a custom "getSequence" function
getUpstream <- function(x, bp.upstream = 50){
ensembl <- useMart("ensembl", dataset = "hsapiens_gene_ensembl")
upstream.master <- lapply(x, function(i,stream)
getSequence(id = i,
type = "hgnc_symbol",
seqType = "coding_gene_flank",
upstream = stream,
mart = ensembl),stream=bp.upstream)
upstream.master
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句