如何在 R 中连接每个样本的两个 DNAStringSet 序列?

问题描述 投票:0回答:4

我有两个

Large DNAStringSet
对象,其中每个对象包含 2805 个条目,每个条目的长度为 201。我想简单地将它们组合起来,所以有 2805 个条目,因为每个条目都是这个大小,但我想要一个对象,两者的组合。

我尝试这样做

s12 <- c(unlist(s1), unlist(s2))

但是创建了具有 1127610 个元素的单个

Large DNAString
对象,这不是我想要的。我只是想将它们组合到每个样本中。

编辑:

我的

DNASTringSet
对象中名为
s1
s2
的每个条目都具有与此类似的格式:

    width seq
[1]   201 CCATCCCAGGGGTGATGCCAAGTGATTCCA...CTAACTCTGGGGTAATGTCCTGCAGCCGG
r concatenation bioconductor
4个回答
4
投票

您可以将每个

DNAStringSet
转换为字符。例如:

library(Biostrings)
set1 <- DNAStringSet(c("GCT", "GTA", "ACGT"))
set2 <- DNAStringSet(c("GTC", "ACGT", "GTA"))

as.character(set1)
as.character(set2)

然后将它们粘贴在一起形成

DNAStringSet

DNAStringSet(paste0(as.character(set1), as.character(set2)))

3
投票

由于您使用的是 Biostrings 包中的 DNAStringSet,我建议您使用该包的默认函数来处理 XStringSets。使用 r 基函数会花费大量时间,因为它们需要不必要的转换。

因此您可以使用Biostrings

xscat
功能。例如:

library(Biostrings)
set1 <- DNAStringSet(c("GCT", "GTA", "ACGT"))
set2 <- DNAStringSet(c("GTC", "ACGT", "GTA"))

xscat(set1, set2)

结果将是:

DNAStringSet object of length 3:
width seq
[1] 6 GCTGTC
[2] 7 GTAACGT
[3] 7 ACGTGTA

1
投票

如果您的目标是返回一个列表,其中每个列表元素都是原始列表中相应列表元素的串联,从而产生长度为 2805 的列表,其中每个列表元素的长度为 402,您可以使用

Map 来实现
。这是一个具有较小列表对的示例。

# set up the lists
set.seed(1234)
list.a <- list(a=1:5, b=letters[1:5], c=rnorm(5))
list.b <- list(a=6:10, b=letters[6:10], c=rnorm(5))

每个列表包含 3 个元素,它们是长度为 5 的向量。现在,按列表位置使用

Map
c
连接列表:

Map(c, list.a, list.b)
$a
 [1]  1  2  3  4  5  6  7  8  9 10

$b
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"

$c
 [1] -1.2070657  0.2774292  1.0844412 -2.3456977  0.4291247  0.5060559 
     -0.5747400 -0.5466319 -0.5644520 -0.8900378

对于您所描述的问题,您可以使用

s12 <- Map(c, s1, s2)

Map
的第一个参数是一个函数,告诉
Map
如何处理您给它的列表项。这些列表项上方是 a 和 b,在您的示例中,它们是 s1 和 s2。


0
投票

根据XStringSet对象的帮助,您可以使用append函数添加序列:

追加(x,值,之后=长度(x))

其中

x
values
是 XStringSet 对象

在你的情况下,它将是:

library(Biostrings)
set1 <- DNAStringSet(c("GCT", "GTA", "ACGT"))
set2 <- DNAStringSet(c("GTC", "ACGT", "GTA"))

set12 <- append(set1, set2, after=length(set1))
© www.soinside.com 2019 - 2024. All rights reserved.