【问题标题】:rpy2 Error: "unrecognized escape in character string"rpy2错误:“字符串中无法识别的转义”
【发布时间】:2015-08-24 15:51:53
【问题描述】:

我想在我的 python 代码中插入 R 中的一段代码。为此,我正在使用 rpy2。 R 代码涉及许多正则表达式,似乎 rpy2 没有正确处理它们,或者我没有对它们进行充分编码。

下面是一段代码的例子,一个单词和另一个不起作用:

1) 有效:一个非常简单的 removeStopWords 函数:

import rpy2.robjects as robjects
from rpy2.robjects.packages import importr

robjects.r('''
library(data.table)
library(tm)

removeStopWords <- function(x) gsub("  ", " ", removeWords(x, stopwords("english")))

''')

In [4]: r_f = robjects.r['removeStopWords']
In [5]: r_f('I want to dance')[0]
Out[5]: 'I want dance'

2) 它不起作用:删除前导和尾随空格的也是微不足道的功能:

robjects.r('''
library(data.table)
library(tm)

trim <- function (x) gsub("^\\s+|\\s+$", "", x)

''')

 Error: '\s' is an unrecognized escape in character string starting ""^\s"
p = rinterface.parse(string)
Abort

我被 IPython “开除”了

我直接试过了:

import rpy2.rinterface as ri
exp = ri.parse('trim <- function (x) gsub("^\\s+|\\s+$", "", x)') 

但是结果是一样的,Abort然后退出IPython

在这个阶段,我真的不知道该尝试什么。 R 代码非常大,因此将所有内容从 R 迁移到 python 需要一些时间……而且我宁愿不必做这样的事情。

非常感谢任何帮助!

提前感谢您的宝贵时间。

【问题讨论】:

    标签: python regex r rpy2


    【解决方案1】:

    当您在 Python 中将\\ 写入字符串时,它会存储为\,因为\ 是一个转义字符。因此,当 R 执行代码时,它会看到 "^\s+|\s+$"。但是\也是R中的转义字符,\s不被识别为任何转义字符。

    如果你想让 R 接收到"^\\s+|\\s+$",你需要在 Python 中写 "^\\\\s+|\\\\s+$"(反斜杠数量的两倍)。

    【讨论】:

    • 你去!它的话。谢谢!我曾尝试添加一个\,但它不起作用,所以我决定停止。再次感谢。
    猜你喜欢
    • 2018-05-10
    • 2014-08-01
    • 1970-01-01
    • 2012-09-23
    • 2015-07-23
    • 2021-08-21
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多