我有以下矢量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"
所以idon't得到问题在哪里。
即使我这样做:
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下载并安装
提前致谢
有两种方法可以使用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
)会自动转到fucntion的第一个参数。
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
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