Как исходный код R, который записывает dataframe в Python - PullRequest
1 голос
/ 26 апреля 2019

У меня есть R-скрипт, который записывает фрейм данных. Для простоты предположим, что фрейм данных записан в R:

testing = data.frame(x=c(1,2,3), y = c(4,5,6))

Моя цель - использовать код Python для некоторого моделирования на этом фрейме данных (очевидно, не на этом фактическом фрейме данных, но, опять же, для простоты). Итак, я написал следующий код на Python для получения кода R в:

import rpy2.robjects as robjects
from rpy2.robjects.packages import importr
import rpy2.robjects.packages as rpackages
base = importr('base')
utils = importr('utils')
from rpy2.robjects.lib.dplyr import DataFrame
from rpy2.robjects import pandas2ri
pandas2ri.activate()

...

r = robjects.r
r.source("python-testing_script.R")

Эллипсы здесь представляют меня загрузкой в ​​другие необходимые пакеты, но они не нужны для этой проблемы. Примечание python-testing_script.R - это то место, где записывается r-кадр данных.

Я думал, что при поиске в этом коде R в мою глобальную среду на Python будет записан кадр данных Pandas, но вместо этого я не получаю ничего нового в среду и следующий вывод:

Out[1]: 
R object with classes: ('list',) mapped to:
<ListVector - Python:0x00000143B9F98188 / R:0x00000143CD2BE988>
[DataFrame, BoolVector]
R object with classes: ('list',) mapped to:
<ListVector - Python:0x00000143B9F98188 / R:0x00000143CD2BE988>
[DataFrame, BoolVector]
  visible: <class 'rpy2.robjects.vectors.BoolVector'>
  R object with classes: ('logical',) mapped to:
<BoolVector - Python:0x00000143BFE14048 / R:0x00000143B9DC3DD8>
[       0]

Любые советы о том, что здесь делать? Я всегда мог записать свой фрейм данных в CSV-файл и прочитать CSV-файл в Python, но я подумал, что было бы интереснее, чтобы R и Python хорошо играли вместе. Я также понимаю, что в этом тривиальном случае я мог бы просто написать фрейм данных на Python, но мой реальный сценарий не так прост.

1 Ответ

0 голосов
/ 02 мая 2019

Мне удалось понять это. Так что функция source возвращает R объектов, одним из которых является интересующий меня фрейм данных. Поэтому все, что мне нужно было сделать, - это прикрепить этого маленького парня:

obj1, obj2 = r.source("python-testing_script.R")
testing = pandas2ri.ri2py(obj1)

Это превратило testing фрейм данных из моего R-скрипта в фрейм данных pandas. Надеюсь, что это может помочь кому-то еще относительно новичку в Python в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...