Как динамически создавать пустые GRanges?
Я хочу создать пустой объект GRanges (из пакета GenomicRanges) dynamicicall.
Если у нас есть два альтернативных варианта, opt1 и opt2, мы можем написать статически как:
library(GenomicRanges)
GRanges(seqnames=NULL,ranges=NULL,strand=NULL, opt1=NULL, opt2=NULL)
Вопрос в том, "Как мы можем динамически создать объект GRanges?". Или, более конкретно, "Возможна ли следующая функция XX?":
opts=c('opt1','opt2','opt3')
#' dynamic create blank GRanges with optional fields
#' @param opts, a vector containing the colnames of "mcols" of GRanges object
#' @return blank GRanges object
functionXX<-function(opts){
//todo:
}
Спасибо!
1 ответ
Недостаточно только имен столбцов, каждое поле должно иметь определенные типы данных.
Ниже приведено решение:
opts=c('opt1','opt2','opt3')
tp=list(character(),character(),character())
functionXXX<-function(opts,tp){
names(tp)=opts
df=do.call(data.frame,tp)
gr=GRanges(c(seqnames=NULL,ranges=NULL,strand=NULL))
mcols(gr)=df
gr
}
functionXXX(opts,tp)
#GRanges object with 0 ranges and 3 metadata columns:
# seqnames ranges strand | opt1 opt2 opt3
# <Rle> <IRanges> <Rle> | <character> <character> <character>
#-------
#seqinfo: no sequences