ある種のスコープの問題に帰着すると思う一般的な質問があります。
以下は、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 が呼び出されると、upstream=50 に設定されると考えました。誰も私が理解できない理由を教えてもらえますか?