중첩 된 lapply / apply 함수 내에서 호출 될 때 빈 벡터에 값을 추가 할 수없는 이유가 있습니까? bucket
값을 입력 하려는 빈 벡터 가 있지만 출력 bucket
에 각 반복마다 다시 초기화 된다고 표시 됩니다. 내가 뭘 잘못하고 있는지에 대한 통찰력을 주시면 감사하겠습니다.
head(genelist.info.u)
# Gene Chromosome TSS TES Strand ExternalGeneID
# 142 TAL1 chr1 47697387 47681962 -1 TAL1
# 294 TGFB2 chr1 218519577 218617961 1 TGFB2
# 735 SPAG17 chr1 118507433 118496484 -1 SPAG17
# 749 ANKRD34A chr1 145470508 145475646 1 ANKRD34A
# 757 RCSD1 chr1 167599330 167675486 1 RCSD1
# 763 LHX9 chr1 197881037 197887120 1 LHX9
bucket <- vector()
newlist <- lapply(chr, FUN=function(u){
genelist.info.u <- genelist.info[[u]]
if(dim(genelist.info.u)[1] > 0){
cov.chr <- sapply(1:nrow(genelist.info.u), FUN=function(x){
if(genelist.info.u[x, "Strand"] == 1){
#do something
}else{
#do something else
}
print(paste0("gene: ", genelist.info.u[x, "Gene"]))
bucket <- c(bucket, genelist.info.u[x, "Gene"])
print(paste0("bucket: ", bucket))
return(gene.coverage)
})
return(cov.chr)
}
})
> bucket
logical(0)
Output:
[1] "gene: TAL1"
[1] "bucket: TAL1"
[1] "gene: TGFB2"
[1] "bucket: TGFB2"
[1] "gene: SPAG17"
[1] "bucket: SPAG17"
[1] "gene: ANKRD34A"
[1] "bucket: ANKRD34A"
[1] "gene: RCSD1"
[1] "bucket: RCSD1"
[1] "gene: LHX9"
[1] "bucket: LHX9"
[1] "gene: NOTO"
[1] "bucket: NOTO"
[1] "gene: OTX1"
bucket
함수 외부와 함수 bucket
내부에서 선언 된 것이 반드시 같은 것은 아닙니다. 함수 내부에서 호출 bucket <- c(bucket, genelist.info.u[x, "Gene"])
하면 bucket
해당 함수에서 업데이트 됩니다. bucket
마지막에 반환하지 않기 때문에 처음에 글로벌 환경에서 초기화 한 항목 (사용 bucket <- vector()
)은 변경되지 않습니다.
즉, 함수 내에서 할당 된 할당은 명시 적으로 변경하지 않는 한 전역 환경이 아닌 함수의 환경에 영향을줍니다.
상위 환경에 할당하려면 <<-
대신<-
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다