如何为R中字符串中的每个位置调用函数?
Posted
技术标签:
【中文标题】如何为R中字符串中的每个位置调用函数?【英文标题】:How to call a function for every position within a string in R? 【发布时间】:2021-12-19 09:12:10 【问题描述】:正如我的问题所暗示的,我的任务是编写一个函数,该函数在向量的每个位置调用另一个函数。以下是我目前拥有的原始功能:
find.TATA = function(k,s)
v = string.to.vec(s)
i = v[k:(k+5)]
TATA = "TATAAA"
TATA.v = string.to.vec(TATA)
return(all(i==TATA.v))
如您所见,该函数同时获取一个字符串(在本例中为 DNA 序列)和序列中的一个位置 (k),并根据“TATAAA”是否出现在位置 k 处返回 TRUE 或 FALSE。
我想知道如何编写第二个函数,在输入字符串的每个位置调用第一个函数 (1:995)。结果应该为每个位置返回 TRUE 或 FALSE。然后,我将使用一个虚拟变量修改该函数,以计算结果出现为 TRUE 的次数。提前致谢!
(附注:请尽量避免使用包中的内容,因为我们被告知要使用基本 R 功能解决此问题)
【问题讨论】:
k 可以从字符串中的每个位置开始 (1, 2, 3, ...) 还是每个位置 (1, 6, 11, ...) k 增加 5? 因此,由于要查找的“TATAAA”字符串长度为 6 个字符,因此该函数正在检查从位置 k 开始的 6 个元素的子向量。例如,如果 k =5,则检查位置 5 到 10 的函数以查看“TATAAA”是否出现在此范围内。希望对您有所帮助。 【参考方案1】:这是一种相当原始的做事方式:
count.TATA <- function(string)
count <- 0
for (i in 1:nchar(string)-5)
if (substr(string, i, i+5) == "TATAAA")
count <- count + 1
return(count)
【讨论】:
效果很好,谢谢!作为跟进,我将如何将此函数应用于多个随机生成的字符串?例如,我有一个 random.dna(x) 函数,它返回一串长度为 x 的随机 dna 碱基,我想将你的函数应用于 1000 个这些 random.dna 字符串? 我假设您将这 1000 个字符串存储在某种列表或向量中?你可以试试sapply(random.dna.vec, count.TATA)
太好了,我会试一试的。非常感谢!以上是关于如何为R中字符串中的每个位置调用函数?的主要内容,如果未能解决你的问题,请参考以下文章