库(Benchmarking)中有一个名为dea(x,y,*args)的函数,它返回有用的对象。我在下面描述了三个关键的问题:
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()函数来规避这个问题。
我相信最好的解决方案是从文件中读和写:
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
在修改我编写的代码时
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文件进行本机导入没有起作用
发布于 2022-08-05 20:50:47
第二种方法是前进的道路。您需要使用转换器上下文,以便python和r变量能够自动转换。具体来说,请尝试使用随pandas2ri附带的rpy2子模块。就像这样:
from rpy2.robjects import pandas2ri
with pandas2ri:
crs = Benchmarking.dea(data['Age'], data['CO2'], RTS='crs', ORIENTATION='in')如果这不起作用,请用错误更新您的帖子。
https://stackoverflow.com/questions/73254896
复制相似问题