【发布时间】:2019-08-23 01:05:57
【问题描述】:
我有以下向量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 也是如此。
如果我在应用DNAString 函数后检查v 的类,它会返回"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下载和安装
提前致谢
【问题讨论】:
-
试试
lapply(v, oligonucleotideFrequency, width = 2) -
该死的。塔工作!我很惭愧它是如此简单。真的非常感谢。将其发布为答案,我将非常乐意接受它
-
我已扩展我的评论作为答案。谢谢。
标签: r function vector lapply dna-sequence