Passing Python variable to R using rpy2

I have a basic R script that executes GLM on a MySQL dataset. This works great using Rscript in bash. However, I would like to name it in a python script, so I can add it to a loop, I can create an sql statement, but I cannot pipe it to R using rpy2;

for word in words:
    sql_scores = "select a.article_id, response, score  from scores as a join profile as b on a.article_id = b.article_id where response in (1,0) and keyword = '%s';" % (word[0])
    robjects.r("library(RMySQL)")
    robjects.r("mydb = dbConnect(MySQL(), user='me', password='xxxx', host='aws.host', dbname='mydb')")
    robjects.r("results = fetch(dbSendQuery(mydb, '%s'))") % (sql_scores)
    robjects.r("model <- glm(response ~ score , data=results, family=binomial)")
    robjects.r("summary(model)")

      

If I print sql_scores I can run this fine directly in MySQL. However, Python produces this error:

Loading required package: DBI
Traceback (most recent call last):
  File "keyword_searcher.py", line 30, in <module>
    robjects.r("results = fetch(dbSendQuery(mydb, '%s'))") % (sql_scores)
  File "/usr/local/lib/python2.7/dist-packages/rpy2/robjects/__init__.py", line 268, in __call__
    p = rinterface.parse(string)
 ValueError: Error while parsing the string.

      

I cannot figure out the correct syntax for:

robjects.r("results = fetch(dbSendQuery(mydb, %s))") % (sql_scores)

      

0


source to share


1 answer


Use double quotes around "% s" and single quotes around robjects.r:

robjects.r('results = fetch(dbSendQuery(mydb, "%s"))') % (sql_scores)

      



or use the format () method:

robjects.r('fetch(dbSendQuery(mydb, {0}))'.format(sql_scores))

      

+1


source







All Articles