“Rle”(运行长度编码)的数据表示类。 这个类对于代表全基因组序列覆盖很好用。(表示,智商如我,只能在纸上手动画线段才理解)要理解!要理解!要理解!
[AppleScript] 纯文本查看 复制代码 ```{r RleEx1}
library(GenomicRanges)
```
### Rle
“Rle” 是向量run-length-encoded表示。 `r Biocpkg(“IRanges”)`package实现对这个类的支持。 注意:还有一个名为`rle`的基础R类,它具有很少的功能。
向量的长度表示将连续的相同的值作为一个集合来运行。 例子如下
[AppleScript] 纯文本查看 复制代码 ```{r RleEx1}
rl <- Rle(c(1,1,1,1,2,2,3,3,2,2))
rl
runLength(rl)
runValue(rl)
as.numeric(rl)
```
### Useful functions for Rle
注意函数`runLength()`和`runValue()`。
如果这是非常有效的表示,当以下的情况
- 矢量很长
- 有很多连续具有相同的值的元素
这对于分段常数的基因组或者基因组大部分未被覆盖的 数据(例如哺乳动物中的RNA测序)尤其有用。
在许多方面`Rle`s作为普通向量,你可以使用它们进行算术,使用标准的R函数(如`+`和`log2`)来转换它们。
还有“RleList”,它是“Rle”的列表。 该类用于表示基因组广泛的覆盖轨道,其中列表的每个元素是不同的染色体。
一个标准用例是你有一些区域(比如说“IRanges”),你想对这些每个区域的的“Rle”做一些事情。 输入`aggregate()`。
[AppleScript] 纯文本查看 复制代码 ```{r aggregate}
ir <- IRanges(start = c(2,6), width = 2)
ir
aggregate(rl, ir, FUN = mean)#往下看知道怎么来,就是分别求(2,3)
#和(3,3)的均值
```
也可以通过`coverage()`函数将 `IRanges`转换成`Rle`。 对每个整数, 有多少个范围重复数为这个整数。
[AppleScript] 纯文本查看 复制代码 ```{r coverage}
ir <- IRanges(start = 1:10, width = 3)#我是画线段做的
ir
rl <- coverage(ir)
rl
```
您可以通过`slice()`函数选择高覆盖区域:
[AppleScript] 纯文本查看 复制代码
```{r slice}
slice(rl, 2)
```
This outputs a `Views` object, see next section.
### Views and Rles
在“r Biocpkg(”Biostrings“)的包中,我们了解了基因组上的 `Views`。 `Views`也可以在`Rle`s上实例化。
[AppleScript] 纯文本查看 复制代码
```{r views}
vi <- Views(rl, start = c(3,7), width = 3)
vi
```
with `Views` you can now (again) apply functions:
```{r viewsMean}
mean(vi)#咋算的
```
This is very similar to using `aggregate()` described above.
### RleList
“RleList”只是一个“Rle”列表。 它类似于概念中的“GRangesList”。
### Rles和GRanges
`Rle`也可以由`GRanges`构建。
这通常涉及“RleList”,其中列表的每个元素都是染色体。 令人惊讶的是,我们还没有一个“RleList”类型的结构,它还包含有关说不同染色体长度的信息。
让我们看一些例子
[AppleScript] 纯文本查看 复制代码 ```{r GRanges}
gr <- GRanges(seqnames = "chr1", ranges = IRanges(start = 1:10, width = 3))
rl <- coverage(gr)
rl
```
Using `Views` on such an object exposes some missing functionality
在这样一个对象上使用`Views`会显示一些缺少的功能
[AppleScript] 纯文本查看 复制代码 ```{r GRangesViews, error=TRUE}
grView <- GRanges("chr1", ranges = IRanges(start = 2, end = 7))
grView
vi <- Views(rl, grView)
vi
```
We get an error, mentioning some object called a `RangesList`. This type of object is similar to a `GRanges` and could be considered succeeded by the later class. We sometimes see instances of this popping around.
我们得到一个错误,提到一些称为“RangesList”的对象。 这种类型的对象类似于`GRanges`,可以被后面的类认为是成功的。 我们有时会看到这个弹出的实例。
[AppleScript] 纯文本查看 复制代码 ```{r GRangesViews2}
vi <- Views(rl, as(grView, "RangesList"))
vi
vi[[1]]
```
## Biology Usecase
生物学应用
假设我们要计算属于(已知)外显子的碱基的平均覆盖范围。
输入对象
[AppleScript] 纯文本查看 复制代码 **reads**: a `GRanges`.
**exons**: a `GRanges`.
pseudocode:
```{r usecase, eval=FALSE}
bases <- reduce(exons)
nBases <- sum(width(bases))
nCoverage <- sum(Views(coverage(reads), bases))
nCoverage / nBases
```
|