2015-06-09 50 views
1

我在R中有一段代碼,我想在我的Python代碼中插入。爲了達到這個目的,我使用了rpy2。 R代碼涉及許多正則表達式,似乎rpy2沒有正確處理它們,或者我沒有對它們進行充分編碼。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的移動都需要我一些時間......我寧願不必做這樣的事情。

任何幫助非常感謝!

提前感謝您的時間。

回答

2

當您在Python中使用字符串編寫\\時,它被存儲爲\,因爲\是一個轉義字符。所以當R執行代碼時,它看到"^\s+|\s+$"。但是\也是和逃避字符在R和\s不被識別爲任何轉義字符。

如果你想讓R接收"^\\s+|\\s+$",你需要在Python中編寫"^\\\\s+|\\\\s+$"(反斜槓數量的兩倍)。

+1

你走了!它的話。謝謝!我曾嘗試添加一個'''''',但它不起作用,所以我決定停止。再次感謝。 – Javier

相關問題