繁体   English   中英

R - 传递变量的正向前看

[英]Positive look ahead in R - passing variables

我陷入了正常的表达。 我通常使用这行代码来查找字符串中重叠的重复:

gregexpr("(?=ATGGGCT)",text,perl=TRUE)
[[1]]
[1]  16  45  52  75 203 210 266 273 327 364 436 443 480 506 534 570 649
attr(,"match.length")
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
attr(,"useBytes")
[1] TRUE

现在我想给gregexpr一个包含在变量中的模式:

x="GGC"

当然,如果我传递变量xgregexpr将搜索"x"而不是变量包含的内容

gregexpr("(?=x)",text,perl=TRUE)
[[1]]
[1] -1
attr(,"match.length")
[1] -1
attr(,"useBytes")
[1] TRUE

在这种积极展望的情况下,如何将变量传递给gregexpr

我会玩sprintf函数:

x <- "AGA"
text <- "ACAGAGACTTTAGATAGAGAAGA"
gregexpr(sprintf("(?=%s)", x), text, perl=TRUE)
## [[1]]
## [1]  3  5 12 16 18 21
## attr(,"match.length")
## [1] 0 0 0 0 0 0
## attr(,"useBytes")
## [1] TRUE

sprintfx的值替换%s的出现。

你可以使用paste0 ,它是paste(x, sep="")缩写paste(x, sep="") ......

x <- "GGC"
text <- 'ATGGGCTATGGGCTATGGGCTATGGGCT'
gregexpr(paste0('(?=', x, ')'), text, perl=TRUE)
# [[1]]
# [1]  4 11 18 25
# attr(,"match.length")
# [1] 0 0 0 0
# attr(,"useBytes")
# [1] TRUE

如果您想访问重叠的匹配项,请查看R中的重叠匹配项

gsubfn包中的fn$前缀支持字符串插值:

library(gsubfn)

# test data
text <- "ATGGGCTAAATGGGCT"
x <- "GGGC"

fn$gregexpr("(?=$x)", text, perl = TRUE)

请参阅?fngsubfn主页和gsubfn插图, vignette("gsubfn")

好吧我用这种方式解决了它:

text="ATGGGCTAAATGGGCT"
x="GGC"
c=paste("(?=",x,")",sep="")
r=gregexpr(c,text,perl=TRUE)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM