3

ある種のスコープの問題に帰着すると思う一般的な質問があります。

以下は、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 に設定されると考えました。誰も私が理解できない理由を教えてもらえますか?

4

1 に答える 1