【问题标题】:Run R script in python using data from python in the R script (rpy2)在 R 脚本 (rpy2) 中使用来自 python 的数据在 python 中运行 R 脚本
【发布时间】:2018-12-04 18:42:56
【问题描述】:

我想用 rpy2 在 python 中运行一个 R 脚本,我已经知道该怎么做

R代码是:

dataR = data.frame( Ingresos = c(23,45,24,23,54),
                    Bonos = c(23,45,12,67,54),
                    Deuda = c(23,4,1,6,3),
                    row.names = c("Nathy", "Tomas", "Joe", "Emily", "Javi") )
dataR
promedio_ingresos = mean(dataR$Ingresos)
Max_Ing = sort(dataR$Ingresos[dataR$Ingresos>promedio_ingresos])
Max_Ing

要在 python 中运行这个 R 脚本,我使用:

import rpy2
from rpy2.robjects.packages import importr
import rpy2.robjects as robjects
r = robjects.r
output = r.source("R_script_run_in_python.R")
output

输出从我的 R 代码中获取最后一个值

现在我想运行相同的代码,但使用我在 python 中定义的数据,例如:

import pandas as pd
df = pd.DataFrame( np.random.randn(5,3), 
                   columns = ["Ingresos","Bonos","Deuda"], 
                   index = ["Max", "Nathy", "Tom", "Joe", "Kathy"] )

所以我现在要运行的 R 代码就是:

promedio_ingresos = mean(dataR$Ingresos)
Max_Ing = sort(dataR$Ingresos[dataR$Ingresos>promedio_ingresos])
Max_Ing

但是dataR是df,我该怎么做呢?

【问题讨论】:

  • 很好奇为什么需要在 R 中运行什么可以在 pandas 中轻松运行?通常rpy2 用于一个专用模块/库,而不是另一个。
  • @Parfait 我在 R 和 python 中有一些代码,现在我们正在将所有代码迁移到 python,但是我想利用 R 开发的非常好的库和代码,例如记分卡库来自 R。我也不会花太多时间将一些代码从 R 迁移到 python

标签: python r rpy2


【解决方案1】:

我试过了,效果很好

# Data    
# Pandas dataframe
df = pd.DataFrame( np.random.randn(5,3),
                   columns = ["Ingresos","Bonos","Deuda"],
                   index = ["Max", "Nathy", "Tom", "Joe", "Kathy"] )   
# rpy2 datframe
dataR = pandas2ri.py2ri(df)

# R code
robjects.globalenv["dataR"] = dataR
robjects.r('''
           promedio_ingresos = mean(dataR$Ingresos)
           Max_Ing = sort(dataR$Ingresos[dataR$Ingresos>promedio_ingresos])
''')
print(robjects.globalenv["dataR"])
print(robjects.globalenv["promedio_ingresos"])
print(robjects.globalenv["Max_Ing"])

【讨论】:

    猜你喜欢
    • 2019-09-14
    • 2018-09-30
    • 2014-08-24
    • 2013-11-22
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    相关资源
    最近更新 更多