rpy2错误:"字符串中无法识别的转义"

时间:2015-06-09 17:15:03

标签: python regex r rpy2

我在R中有一大块代码,我想在我的python代码中插入。为此我使用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

而我被驱逐出去了#34;来自IPython

我直接尝试过:

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

但结果是相同的,Abort然后是IPython

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

非常感谢任何帮助!

提前感谢您的时间。

1 个答案:

答案 0 :(得分:3)

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

如果您希望R接收"^\\s+|\\s+$",则需要在Python中编写"^\\\\s+|\\\\s+$"(反斜杠数的两倍)。