我在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需要一些时间......我宁愿不必做这样的事情。
非常感谢任何帮助!
提前感谢您的时间。
答案 0 :(得分:3)
当您在Python中的字符串中编写\\
时,它将存储为\
,因为\
是一个转义字符。因此,当R执行代码时,它会看到"^\s+|\s+$"
。但\
也是R中的字符转义而\s
未被识别为任何转义字符。
如果您希望R接收"^\\s+|\\s+$"
,则需要在Python中编写"^\\\\s+|\\\\s+$"
(反斜杠数的两倍)。