将 IRanges 列表作为 data.frame 中的列
Include list of IRanges as column in a data.frame
我有一些数据结构如下:
x01 <- c("94633X94644Y95423X96130", "124240X124494Y124571X124714", "135654X135660Y136226X136786")
我最终通过如下所示的一些步骤将其用作 IRanges 对象:
x02 <- sapply(x01,
function(x) do.call(rbind,
strsplit(strsplit(x,
split = "Y",
fixed = TRUE)[[1]],
split = "X",
fixed = TRUE)),
simplify = FALSE,
USE.NAMES = FALSE)
x03 <- sapply(x02,
function(x) IRanges(start = as.integer(x[, 1L]),
end = as.integer(x[, 2L])),
simplify = FALSE,
USE.NAMES = FALSE)
> x03
[[1]]
IRanges object with 2 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 94633 94644 12
[2] 95423 96130 708
[[2]]
IRanges object with 2 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 124240 124494 255
[2] 124571 124714 144
[[3]]
IRanges object with 2 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 135654 135660 7
[2] 136226 136786 561
现在我希望能够将 x03 作为一个列存储在 data.frame 中,其中包含一些简单的相关信息:
> x04 <- data.frame("col1" = 1:3,
"col2" = x01,
"col3" = x03)
这毫不奇怪地告诉我我有不同的行数,但是,我觉得我已经看到 JSON 导入到 R 中模仿我想要的那种结构,其中一个参差不齐的列表位于列中一个 data.frame。这是可行的操作吗?
这是一个很好的问题,我之前在其他数据框上看到过它 objects,但我认为上面的方法不起作用,因为只要有一个 as.data.frame 就可以使用到矩阵或 IRanges 上,它会弄乱尺寸而不是嵌入它(我可能完全错了)。
一种选择是使用小标题:
x04 = tibble::tibble(x01=x01,x02=x02,x03=x03)
# A tibble: 3 x 3
a b c
<chr> <list> <list>
1 94633X94644Y95423X96130 <chr[,2] [2 x 2]> <IRanges>
2 124240X124494Y124571X124714 <chr[,2] [2 x 2]> <IRanges>
3 135654X135660Y136226X136786 <chr[,2] [2 x 2]> <IRanges>
x04$x03
[[1]]
IRanges object with 2 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 94633 94644 12
[2] 95423 96130 708
[[2]]
IRanges object with 2 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 124240 124494 255
[2] 124571 124714 144
[[3]]
IRanges object with 2 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 135654 135660 7
[2] 136226 136786 561
另一个选项:
library(S4Vectors)
DataFrame(x01=x01,x02=List(x02),x03=IRangesList(x03))
x01 x02
<character> <List>
1 94633X94644Y95423X96130 94633:94644,95423:96130,...
2 124240X124494Y124571X124714 124240:124494,124571:124714,...
3 135654X135660Y136226X136786 135654:135660,136226:136786,...
x03
<IRangesList>
1 94633-94644,95423-96130
2 124240-124494,124571-124714
3 135654-135660,136226-136786
我有一些数据结构如下:
x01 <- c("94633X94644Y95423X96130", "124240X124494Y124571X124714", "135654X135660Y136226X136786")
我最终通过如下所示的一些步骤将其用作 IRanges 对象:
x02 <- sapply(x01,
function(x) do.call(rbind,
strsplit(strsplit(x,
split = "Y",
fixed = TRUE)[[1]],
split = "X",
fixed = TRUE)),
simplify = FALSE,
USE.NAMES = FALSE)
x03 <- sapply(x02,
function(x) IRanges(start = as.integer(x[, 1L]),
end = as.integer(x[, 2L])),
simplify = FALSE,
USE.NAMES = FALSE)
> x03
[[1]]
IRanges object with 2 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 94633 94644 12
[2] 95423 96130 708
[[2]]
IRanges object with 2 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 124240 124494 255
[2] 124571 124714 144
[[3]]
IRanges object with 2 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 135654 135660 7
[2] 136226 136786 561
现在我希望能够将 x03 作为一个列存储在 data.frame 中,其中包含一些简单的相关信息:
> x04 <- data.frame("col1" = 1:3,
"col2" = x01,
"col3" = x03)
这毫不奇怪地告诉我我有不同的行数,但是,我觉得我已经看到 JSON 导入到 R 中模仿我想要的那种结构,其中一个参差不齐的列表位于列中一个 data.frame。这是可行的操作吗?
这是一个很好的问题,我之前在其他数据框上看到过它 objects,但我认为上面的方法不起作用,因为只要有一个 as.data.frame 就可以使用到矩阵或 IRanges 上,它会弄乱尺寸而不是嵌入它(我可能完全错了)。
一种选择是使用小标题:
x04 = tibble::tibble(x01=x01,x02=x02,x03=x03)
# A tibble: 3 x 3
a b c
<chr> <list> <list>
1 94633X94644Y95423X96130 <chr[,2] [2 x 2]> <IRanges>
2 124240X124494Y124571X124714 <chr[,2] [2 x 2]> <IRanges>
3 135654X135660Y136226X136786 <chr[,2] [2 x 2]> <IRanges>
x04$x03
[[1]]
IRanges object with 2 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 94633 94644 12
[2] 95423 96130 708
[[2]]
IRanges object with 2 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 124240 124494 255
[2] 124571 124714 144
[[3]]
IRanges object with 2 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 135654 135660 7
[2] 136226 136786 561
另一个选项:
library(S4Vectors)
DataFrame(x01=x01,x02=List(x02),x03=IRangesList(x03))
x01 x02
<character> <List>
1 94633X94644Y95423X96130 94633:94644,95423:96130,...
2 124240X124494Y124571X124714 124240:124494,124571:124714,...
3 135654X135660Y136226X136786 135654:135660,136226:136786,...
x03
<IRangesList>
1 94633-94644,95423-96130
2 124240-124494,124571-124714
3 135654-135660,136226-136786