[R] using sprintf to pass a variable to a RMySQL query

Don MacQueen macq at llnl.gov
Mon Mar 8 21:02:50 CET 2010

I always use paste()

i <- 1
sqlcmd_ScaffLen <- paste("SELECT scaffold.length
FROM scaffold, scaffold2contig, contig2read
WHERE scaffold.scaffold_id=scaffold2contig.scaffold_id AND
scaffold2contig.contig_id=contig2read.contig_id AND
contig2read.read_id LIKE '%MG", i ,"%'", sep='')

That should create bits like
    LIKE '%MG1%'
    LIKE '%MG2%'
and so on.

You just have to get the nesting of the single and double quotes 
correct - the SQL requires single quotes, so use double quotes for 
the fixed character strings insidte paste(). That, and use sep='' to 
get rid of unwanted space characters.

Using paste is also effective for constructs like
   IN (3,4,5)
   IN ('a','b','c')
though it can be necessary to nest one paste within another


At 2:06 PM +0100 3/8/10, alison waller wrote:
>I am using RmySQL and would like to iterate through a few queries.
>I would like to use sprintf but I think I'm having problems mixing and
>matching the sprintf syntax and the SQL regex.
>I have checked my sqlcmd and it works when I wan to match %MG1% but how
>do I iterate for i 1-72?  Escape characters,?
>thanks in advance
>sqlcmd_ScaffLen<-sprintf('SELECT scaffold.length
>FROM scaffold,scaffold2contig,contig2read
>WHERE scaffold.scaffold_id=scaffold2contig.scaffold_id AND
>scaffold2contig.contig_id=contig2read.contig_id AND contig2read.read_id LIKE
>'%MG%s%' ,i)
>========= Here is my vague error message
>Error: unexpected input in:
>R-help at r-project.org mailing list
>PLEASE do read the posting guide http://*www.*R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.

Don MacQueen
Environmental Protection Department
Lawrence Livermore National Laboratory
Livermore, CA, USA

More information about the R-help mailing list