我想将GenomicRanges::GRanges
来自 Bioconductor 的对象作为单列存储在基础 Rdata.frame
中。我想将它放在基础 R data.frame 中的原因是因为我想编写一些 ggplot2 函数,这些函数专门用于底层的 data.frames。但是,我所做的任何尝试似乎都没有结果。基本上这就是我想要做的:
library(GenomicRanges)
x <- GRanges(c("chr1:100-200", "chr1:200-300"))
df <- data.frame(x = x, y = 1:2)
但是该列会自动扩展,而我喜欢将其作为有效GRanges
对象保留在单个列中:
> df
x.seqnames x.start x.end x.width x.strand y
1 chr1 100 200 101 * 1
2 chr1 200 300 101 * 2
当我使用 时S4Vectors::DataFrame
,它可以按我的意愿工作,除了我想要一个基本的 R data.frame 来做同样的事情:
> S4Vectors::DataFrame(x = x, y = 1:2)
DataFrame with 2 rows and 2 columns
x y
<GRanges> <integer>
1 chr1:100-200 1
2 chr1:200-300 2
我也尝试了以下但没有成功:
> df <- data.frame(y = 1:2)
> df[["x"]] <- x
> df
y x
1 1 <S4 class ‘GRanges’ [package “GenomicRanges”] with 7 slots>
2 2 <NA>
警告消息:在 format.data.frame(if (omit) x[seq_len(n0), , drop = FALSE] else x, : 损坏的数据帧中:列将被截断或用 NA 填充
df[["x"]] <- I(x)
rep(value, length.out = nrows) 中的错误:尝试复制“S4”类型的对象
我在使用 实现 GRanges 类的 S3 变体方面取得了一些小小的成功vctrs::new_rcrd
,但这似乎是一种非常迂回的方式来获得代表基因组范围的单个列。