这个问题只是要求在 R 中实现以下问题:Find the longest common starting substring in a set of strings (JavaScript)
“这个问题是最长公共(public)子串问题的一个更具体的情况。我只需要在数组中找到最长的公共(public)起始子串”。
所以我只是在寻找这个问题的 R 实现(最好不是在 JavaScript 版本中建议的 for/while 循环方式),如果可能的话,我想把它包装成一个函数,这样我就可以应用于许多组一个数据表。
经过一些搜索,我找不到一个 R 示例,因此这个问题。
示例数据:
我有以下字符向量:
dput(data)
c("ADA4417-3ARMZ-R7", "ADA4430-1YKSZ-R2", "ADA4430-1YKSZ-R7",
"ADA4431-1YCPZ-R2", "ADA4432-1BCPZ-R7", "ADA4432-1BRJZ-R2")
我正在寻找运行算法在 R 这将找到以下输出:
ADA44
.从我在 JavaScript 接受的答案中看到的,这个想法是首先对向量进行排序,提取第一个和最后一个元素(例如:
"ADA4417-3ARMZ-R7"
和 "ADA4432-1BRJZ-R2"
,将它们分成单个字符,然后循环它们直到其中一个字符不匹配(希望我是对的)任何帮助都会很棒!
最佳答案
捎带 Henrik 的回答,Bioconductor 有一个基于 C 的前缀函数和一个基于 R 的函数。基于R的一个是:
lcPrefix <- function (x, ignore.case = FALSE)
{
x <- as.character(x)
if (ignore.case)
x <- toupper(x)
nc <- nchar(x, type = "char")
for (i in 1:min(nc)) {
ss <- substr(x, 1, i)
if (any(ss != ss[1])) {
return(substr(x[1], 1, i - 1))
}
}
substr(x[1], 1, i)
}
<environment: namespace:Biobase>
...并且不需要 Bioconductor 的任何特殊功能(据我所知)。
--- 引文 ---
Orchestrating high-throughput genomic analysis with Bioconductor. W. Huber, V.J. Carey, R. Gentleman, ..., M. Morgan Nature Methods,
2015:12, 115.
关于用于在一组字符串中查找最长的公共(public)起始子字符串的 R 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28273716/