使用 rpy2 将 Python 变量传递给 R

Passing a Python variable to R using rpy2

我有基本的 R 脚本,可以在 MySQL 数据集上执行 GLM。这 运行 在 bash 中使用 Rscript 没问题。但是我想在 python 脚本中调用它,这样我就可以将它添加到循环中,我可以创建 sql 语句,但我似乎无法使用 rpy2;[= 将它传递给 R 14=]

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)")

如果我打印 sql_scores,我可以直接在 MySQL 中 运行 这样很好。但是 Python 会产生此错误;

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.

我无法找出正确的语法:

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

"%s" 周围使用双引号,在 robjects.r 字符串周围使用单引号:

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

或使用format()方法:

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

您可以使用 robjects.globalenv['varname'] 在 R 环境中访问变量。 所以另一种方法是:

robjects.globalenv['sql_scores'] = sql_scores
robjects.r("results = fetch(dbSendQuery(mydb, sql_scores))")