Как динамически создавать пустые 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
Другие вопросы по тегам