我有一个关于在R中找到最长公共子字符串的问题.在StackOverflow上搜索几个帖子时,我了解了qualV包.但是,我看到这个包中的LCS函数实际上找到了string1中存在的所有字符,即使它们不是连续的.
为了解释,如果字符串字符串1:" HEL LO"字符串2:" HEL 12345lo"我希望可以将输出为HEL,但是我得到的输出为hello.我一定做错了什么.请参阅下面的代码.
library(qualV)
a= "hello"
b="hel123l5678o"
sapply(seq_along(a), function(i)
paste(LCS(substring(a[i], seq(1, nchar(a[i])), seq(1, nchar(a[i]))),
substring(b[i], seq(1, nchar(b[i])), seq(1, nchar(b[i]))))$LCS,
collapse = ""))
Run Code Online (Sandbox Code Playgroud)
我也尝试了Rlibstree方法,但我仍然得到不连续的子串.此外,子串的长度也与我的预期不同.请参阅下文.
> a = "hello"
> b = "h1e2l3l4o5"
> ll <- list(a,b)
> lapply(data.frame(do.call(rbind, ll), stringsAsFactors=FALSE), function(x) getLongestCommonSubstring(x))
$do.call.rbind..ll.
[1] "h" "e" "l" "o"
> nchar(lapply(data.frame(do.call(rbind, ll), stringsAsFactors=FALSE), function(x) getLongestCommonSubstring(x)))
do.call.rbind..ll.
21
Run Code Online (Sandbox Code Playgroud) 有没有人知道R包解决了最长的常见子串问题?我正在寻找可以对矢量起作用的快速的东西.
您知道有什么现成的方法可以获取两个字符串的长度和重叠吗?然而只有与R,也许有什么来自stringr?我正在寻找这里,不幸的是没有成功。
str1 <- 'ABCDE'
str2 <- 'CDEFG'
str_overlap(str1, str2)
'CDE'
str_overlap_len(str1, str2)
3
Run Code Online (Sandbox Code Playgroud)
其他例子:
str1 <- 'ATTAGACCTG'
str2 <- 'CCTGCCGGAA'
str_overlap(str1, str2)
'CCTG'
str_overlap_len(str1, str2)
4
Run Code Online (Sandbox Code Playgroud)
///
str1 <- 'foobarandfoo'
str2 <- 'barand'
str_overlap(str1, str2)
'barand'
str_overlap_len(str1, str2)
6
Run Code Online (Sandbox Code Playgroud)
/// 是的,两个解决方案,总是选择总是重叠
str1 <- 'EFGABCDE'
str2 <- 'ABCDECDE'
str_overlap(str1, str2)
'ABCDE'
str_overlap_len(str1, str2)
5
Run Code Online (Sandbox Code Playgroud)
我想知道是否有自制的小功能,比如这个?
是否有(容易)识别两个字符串共有的共同模式的可能性?这里有一个小例子来说明我的意思:
我有两个包含字符串的变量.两者都包括相同的模式("ABC")和一些"噪音".
a <- "xxxxxxxxxxxABCxxxxxxxxxxxx"
b <- "yyyyyyyyyyyyyyyyyyyyyyyABC"
Run Code Online (Sandbox Code Playgroud)
让我说我不知道常见的模式,我希望R找出两个字符串都包含"ABC".我怎样才能做到这一点?
*编辑
第一个例子可能有点简单化.这是我的真实数据的一个例子.
a <- "DUISBURG-HAMBORNS"
b <- "DUISBURG (-31.7.29)S"
Run Code Online (Sandbox Code Playgroud)
两个字符串都包含"DUISBURG",我希望函数能够识别.
*编辑
我在评论中发布的链接中提出了解决方案.但我仍然没有我想要的.
library(qualV)
LCS(strsplit(a[1], '')[[1]],strsplit(b[1], '')[[1]])$LCS
[1] "D" "U" "I" "S" "B" "U" "R" "G" "-" " " " " "S"
Run Code Online (Sandbox Code Playgroud)
如果函数正在寻找两个向量的最长公共子序列,为什么它不会停止"D" "U" "I" "S" "B" "U" "R" "G"?.
今天我发现除了CPAN之外还有另一个存储库.该存储库是Bioconductor.到目前为止,我注意到Bioconductor的安装过程与传统的CRAN相比略有不同install.packages().当我想使用Bioconductor的一些包装时,我应该担心吗?是否有可能陷入一些依赖性问题(如混合使用例如ubuntu/debian存储库等)等?我问,因为例如这说:
如果你不介意使用bioconductor包,那么,你可以使用...
Bioconductor或其他可能的存储库有什么问题?
r ×5
string ×3
lcs ×2
bioconductor ×1
cran ×1
dna-sequence ×1
overlap ×1
repository ×1
substring ×1