Подготовьте строку Python для R, используя rpy2

Этот вопрос относится к переменной python для R и, возможно, также к это объекты python в rpy2, но ни один из двух полностью не перекрывается, и первый на самом деле без ответа.

Мой вопрос на самом деле очень простой. У меня есть строка, скажем:

In [21]: strg
Out[21]: 'I want to go home'

и я хочу передать его R через robjects.r(''' ''') вот так, например:

robjects.r('''

test <- gsub("to", "",strg)

''')

но, конечно, когда я запускаю это, я получаю: Error in gsub("me", "", strg) : object 'strg' not found.

Я не использовал rpy2 часто (что очевидно), но я думаю, что это связано со средами, в которых R и Python видят объекты.

Я пробовал несколько вещей, например сначала преобразовать строку strg в robject, а затем передать ее в robjects.r(''' '''), но получаю то же сообщение об ошибке. В общем, я не знаю, как сделать так, чтобы strg было видно в окружении R.

Любая помощь высоко ценится!

Спасибо заранее за ваше время!


person Javier    schedule 10.06.2015    source источник


Ответы (2)


Просто добавьте значение strg в командную строку:

robjects.r('''

test <- gsub("to", "",''' + strg + ''')

''')

или, используя .format:

robjects.r('''

test <- gsub("to", "",%s)

'''.format(strg))

Обратите внимание, что вам нужно следить за обратной косой чертой, см. вопрос ">здесь

person hajtos    schedule 10.06.2015
comment
Привет, хайтос. два из них выдают ошибку синтаксического анализа: ValueError: Error while parsing the string. Первый в последней строке ----> 5 ''') исходит из --> 310 p = rinterface.parse(string), а второй также в последней строке: ----> 5 '''.format(strg)) снова исходит из той же функции --> 310 p = rinterface.parse(string) в def __call__(self, string): - person Javier; 10.06.2015
comment
Привет, hajtos, я нашел причину ошибки, которая заключалась в кавычках, необходимых для работы выражения R. поэтому мне просто нужно определить strg = '"I want to go home"', и это сработало. БЛАГОДАРНОСТЬ! - person Javier; 10.06.2015

Я бы порекомендовал вам создать функцию, так как функция R, предоставляемая rpy2, может вызываться так же, как если бы это была функция Python.

my_func = robjects.r('''
function(strg) {
    test <- gsub("to", "",strg)
    test
}
''')

my_func(strg)
person lgautier    schedule 12.06.2015