我有以下向量v
:
c("tactagcaatacgcttgcgttcggtggttaagtatgtataatgcgcgggcttgtcgt",
"tgctatcctgacagttgtcacgctgattggtgtcgttacaatctaacgcatcgccaa",
"gtactagagaactagtgcattagcttatttttttgttatcatgctaaccacccggcg")
我在这里面临一个非常令人沮丧的问题。该载体的每个元件都是DNA序列。我想要做的是将每个元素2个字母除以2,并获得每对字母的出现次数。对于第一个元素,所需的输出就是这个:
AA AC AG AT CA CC CG CT GA GC GG GT TA TC TG TT
3 2 2 4 1 0 6 3 0 6 4 7 7 2 5 4
使用功能oligonucleotideFrequency可以轻松实现此结果。问题在于此功能将不会应用到使用sapply或lapply的列表或向量上,而且我不知道问题出在哪里以及如何解决。
如果我这样做:
oligonucleotideFrequency(DNAString(v[1]), width = 2)
它有效,我得到以下输出:
AA AC AG AT CA CC CG CT GA GC GG GT TA TC TG TT
3 2 2 4 1 0 6 3 0 6 4 7 7 2 5 4
但如果我这样做:
v <- DNAString(v)
lapply(v, oligonucleotideFrequency(v, width = 2)
这就是我得到的:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘oligonucleotideFrequency’ for signature ‘"list"
与sapply
相同。
如果我在应用v
函数后检查DNAString
的类,它将返回"list"
,所以我不明白问题出在哪里。
即使我这样做:
oligonucleotideFrequency(v[1], width = 2)
它返回:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘oligonucleotideFrequency’ for signature ‘"list"’
我在这里完全迷失了,请帮忙,我已经花了几个小时来解决这个问题,我该如何解决这个问题?我想一次将此功能应用于整个矢量。
PD:包含此功能的R软件包,称为Biostrings
,可以从here下载并安装
预先感谢
答案 0 :(得分:1)
x = c("tactagcaatacgcttgcgttcggtggttaagtatgtataatgcgcgggcttgtcgt",
"tgctatcctgacagttgtcacgctgattggtgtcgttacaatctaacgcatcgccaa",
"gtactagagaactagtgcattagcttatttttttgttatcatgctaaccacccggcg")
nc = c("a", "c", "t", "g")
lv = sort(Reduce(paste0, expand.grid(replicate(2, nc, simplify = FALSE))))
lapply(x, function(s)
table(factor(sapply(seq(2, nchar(s), 1), function(i)
substring(s, i - 1, i)),
levels = lv)))
#[[1]]
#aa ac ag at ca cc cg ct ga gc gg gt ta tc tg tt
# 3 2 2 4 1 0 6 3 0 6 4 7 7 2 5 4
#[[2]]
#aa ac ag at ca cc cg ct ga gc gg gt ta tc tg tt
# 3 4 1 4 5 2 4 4 2 4 1 5 3 5 6 3
#[[3]]
#aa ac ag at ca cc cg ct ga gc gg gt ta tc tg tt
# 2 4 4 4 3 3 2 4 2 4 1 3 7 1 3 9
答案 1 :(得分:1)
有两种使用lapply
函数的方法。
第一个是提供用户定义的函数,并按如下所示设置函数内部的所有参数。
library(Biostrings)
v <- c("tactagcaatacgcttgcgttcggtggttaagtatgtataatgcgcgggcttgtcgt",
"tgctatcctgacagttgtcacgctgattggtgtcgttacaatctaacgcatcgccaa",
"gtactagagaactagtgcattagcttatttttttgttatcatgctaaccacccggcg")
lapply(v, function(x) oligonucleotideFrequency(DNAString(x), width = 2))
# [[1]]
# AA AC AG AT CA CC CG CT GA GC GG GT TA TC TG TT
# 3 2 2 4 1 0 6 3 0 6 4 7 7 2 5 4
#
# [[2]]
# AA AC AG AT CA CC CG CT GA GC GG GT TA TC TG TT
# 3 4 1 4 5 2 4 4 2 4 1 5 3 5 6 3
#
# [[3]]
# AA AC AG AT CA CC CG CT GA GC GG GT TA TC TG TT
# 2 4 4 4 3 3 2 4 2 4 1 3 7 1 3 9
第二个是提供函数名称,并按如下所示提供诸如...
之类的论据。对于此选项,列表中的项目(在这种情况下为v
)将自动转到功能的第一个参数。
library(Biostrings)
v <- c("tactagcaatacgcttgcgttcggtggttaagtatgtataatgcgcgggcttgtcgt",
"tgctatcctgacagttgtcacgctgattggtgtcgttacaatctaacgcatcgccaa",
"gtactagagaactagtgcattagcttatttttttgttatcatgctaaccacccggcg")
v <- lapply(v, DNAString)
lapply(v, oligonucleotideFrequency, width = 2)
# [[1]]
# AA AC AG AT CA CC CG CT GA GC GG GT TA TC TG TT
# 3 2 2 4 1 0 6 3 0 6 4 7 7 2 5 4
#
# [[2]]
# AA AC AG AT CA CC CG CT GA GC GG GT TA TC TG TT
# 3 4 1 4 5 2 4 4 2 4 1 5 3 5 6 3
#
# [[3]]
# AA AC AG AT CA CC CG CT GA GC GG GT TA TC TG TT
# 2 4 4 4 3 3 2 4 2 4 1 3 7 1 3 9