首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rpy2将Python变量传递给R

使用rpy2将Python变量传递给R
EN

Stack Overflow用户
提问于 2015-05-29 08:40:58
回答 2查看 3.5K关注 0票数 1

我有一个基本的R脚本,它在MySQL数据集上执行GLM。在bash中使用Rscript可以很好地运行。但是,我想在python脚本中调用它,这样我就可以将它添加到循环中,我可以创建sql语句,但我似乎不能使用rpy2将它传递给R;

代码语言:javascript
复制
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会产生这个错误;

代码语言:javascript
复制
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.

我找不出正确的语法:

代码语言:javascript
复制
robjects.r("results = fetch(dbSendQuery(mydb, %s))") % (sql_scores)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-11 21:01:54

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

代码语言:javascript
复制
robjects.r('results = fetch(dbSendQuery(mydb, "%s"))') % (sql_scores)

或者使用format()方法:

代码语言:javascript
复制
robjects.r('fetch(dbSendQuery(mydb, {0}))'.format(sql_scores))
票数 3
EN

Stack Overflow用户

发布于 2020-02-14 09:05:18

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

代码语言:javascript
复制
robjects.globalenv['sql_scores'] = sql_scores
robjects.r("results = fetch(dbSendQuery(mydb, sql_scores))")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30525027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档