Skip to content

Pb with agrep()

3 messages · Hervé Pagès, Martin Maechler

#
Happy new year everybody,


I'm getting the following while trying to use the agrep() function:

 > pattern <- "XXX"
 > subject <- c("oooooo", "oooXooo", "oooXXooo", "oooXXXooo")
 > max <- list(ins=0, del=0, sub=0) # I want exact matches only
 > agrep(pattern, subject, max=max)
[1] 4

OK

 > max$sub <- 1 # One allowed substitution
 > agrep(pattern, subject, max=max)
[1] 3 4

OK

 > max$sub <- 2 # Two allowed substitutions
 > agrep(pattern, subject, max=max)
[1] 3 4

Wrong!

 > sessionInfo()
R version 2.3.0, 2005-12-22, x86_64-unknown-linux-gnu
 
attached base packages:
[1] "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets"
[7] "base"
 
other attached packages:
Biostrings
   "1.5.6"

Cheers,


Herv?
#
Herve> Happy new year everybody,
    Herve> I'm getting the following while trying to use the agrep() function:

    >> pattern <- "XXX"
    >> subject <- c("oooooo", "oooXooo", "oooXXooo", "oooXXXooo")
    >> max <- list(ins=0, del=0, sub=0) # I want exact matches only
    >> agrep(pattern, subject, max=max)
    Herve> [1] 4

    Herve> OK

    >> max$sub <- 1 # One allowed substitution
    >> agrep(pattern, subject, max=max)
    Herve> [1] 3 4

    Herve> OK

    >> max$sub <- 2 # Two allowed substitutions
    >> agrep(pattern, subject, max=max)
    Herve> [1] 3 4

    Herve> Wrong!

No. 
You have overlooked the fact that 'max.distance = 0.1' (10%) 
*remains* the default, even when 'max.distance' is specified as
a list as in your example [from  "?agrep" ] :
If you specify max$all as "100%", i.e, as 0.9999  ('< 1' !)  everything works
as you expect it:

agrep(pattern, subject, max = list(ins=0, del=0, sub= 2, all = 0.9999))
## --> 2 3 4


Martin Maechler, ETH Zurich
#
Martin Maechler wrote:

            
OK I got it! Thanks for the explanation.
Cheers,

Herv?