首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何像导入本地Python函数一样从R包导入函数并使用其所有输出?

如何像导入本地Python函数一样从R包导入函数并使用其所有输出?
EN

Stack Overflow用户
提问于 2022-08-05 20:16:15
回答 1查看 42关注 0票数 0

库(Benchmarking)中有一个名为dea(x,y,*args)的函数,它返回有用的对象。我在下面描述了三个关键的问题:

代码语言:javascript
复制
crs = dea(mydata_matrix_x, my_data_matrix_y, RTS="IN", ORIENTATION= "in") # both matrixes have N rows

efficiency(crs) # a 'numeric' type object which looks like a 1xN vector
peers(crs) # A matrix: Nx2 (looks to me like a pandas dataframe when run in .ipynb file with R kernel)
lambda(crs) # A matrix: Nx2 of type dbl (also looks like a dataframe)

现在,我想以编程方式更改my_data_matrix_x。这个矩阵代表了我的输入。首先,它将是一个Nx10矩阵。然而,我打算依次删除每一列,并在Nx9矩阵上运行dea(),然后绘制出的效率分数。问题是,我不知道如何在R中实现这一点(除其他外),我宁愿通过用Python编写我所有的代码并以某种方式从R脚本导入这个dea()函数来规避这个问题。

我相信最好的解决方案是从文件中读和写:

代码语言:javascript
复制
from Benchmarking_script.r import dea

def test_inputs(data, input):
    INPUTS = ['input 1', 'input2', 'input3', 'input4,' 'input5']
    OUTPUTS = ['output1', 'output2']
    data_inputs = data.drop(f"{input}", axis=1)
    data_outputs = data[OUTPUTS]

    data_inputs.to_csv("my_inputs.csv")
    data_outputs.to_csv("my_outputs.csv")

    run Benchmarking.dea(data_inputs, data_outputs, RTS="crs", ORIENTATION="in")

显然,这最后一行是行不通的:我有兴趣听到灵活的(简单的!)将此dea()函数当作本机Python函数具体运行的方法

相关的SO问题

我发现最近的答案是Importing any function from an R package into python

在修改我编写的代码时

代码语言:javascript
复制
import pandas as pd
data = pd.read_csv("path/to_data.csv")


import rpy2
import rpy2.robjects as robjects
import rpy2.robjects.packages as rpackages
from rpy2.robjects.vectors import StrVector
from rpy2.robjects.packages import importr
utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1)

packnames = ('Benchmarking')
utils.install_packages(StrVector(packnames))

Benchmarking = importr('Benchmarking')

crs = Benchmarking.dea(data['Age'], data['CO2'], RTS='crs', ORIENTATION='in')

--------------------------------------------------------------
NotImplementedError: Conversion 'py2rpy' not defined for objects of type '<class 'pandas.core.series.Series'>'

因此,将函数作为Python文件进行本机导入没有起作用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-05 20:50:47

第二种方法是前进的道路。您需要使用转换器上下文,以便python和r变量能够自动转换。具体来说,请尝试使用随pandas2ri附带的rpy2子模块。就像这样:

代码语言:javascript
复制
from rpy2.robjects import pandas2ri

with pandas2ri:
    crs = Benchmarking.dea(data['Age'], data['CO2'], RTS='crs', ORIENTATION='in')

如果这不起作用,请用错误更新您的帖子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73254896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档