доступ к загруженному набору данных в коде r с помощью rpy2 - PullRequest
0 голосов
/ 12 января 2020

Я использую код r в python, используя модуль rpy2. У меня есть данные, загруженные в pandas фрейм данных, к которому я хотел бы получить доступ в коде r, который я передаю в виде текста во встроенный процесс r с помощью rpy2.

Я знаю, как все это сделать, но единственный способ Я могу понять, как получить доступ к фрейму данных pandas в коде r, это преобразовать фрейм данных pandas в фрейм данных r, а затем создать текстовое представление на языке r. Затем я интерполирую это представление в строку python, содержащую код r, который я передаю интерпретатору r.

Несмотря на то, что в моем примере с игрушкой, приведенным ниже, это работает нормально, он выглядит немного неуклюжим и, если возможно, Я хотел бы найти более программный c способ доступа к данным.

Одним из решений, которое я уже рассмотрел, было бы избегать непосредственного использования кода r и вместо этого писать все "в python", используя методы доступны в rpy2. Однако целью этого программного обеспечения является поддержка анализа данных в python с использованием небольших произвольных фрагментов кода r. Так что переписать все, используя rpy2, было бы невозможно (или, по крайней мере, крайне непрактично).

Любые предложения?

Вот минимальный рабочий пример, иллюстрирующий то, что я хочу сделать:

#!/usr/bin/env python3

import pandas as pd
import rpy2.robjects as robjects
import rpy2.robjects.packages as rpackages
from rpy2.robjects import pandas2ri
from rpy2.robjects.conversion import localconverter

# load data into a pandas dataframe
data = pd.DataFrame([[1,2],[2,4],[3,7]], columns=['A', 'B'])

# convert pandas dataframe into r dataframe
with localconverter(robjects.default_converter + pandas2ri.converter):
  rdata = robjects.conversion.py2rpy(data)

# test that the r can work with the r format dataframe
base = rpackages.importr('base')
print(base.summary(rdata))

# access this new dataframe within r code passed as text
# this is the janky text interpolation method
rcode = '''
data <- %s
head(data)
''' % (rdata.r_repr())

print('interpolated r code:')
print(rcode)

# evaluate the r code
print(robjects.r(rcode))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...