我在Python中使用rpy2包时遇到了一些问题。 实际上,我试图通过传递一些参数来调用一个名为upliftRF(R中库的“upliftf”)的函数。 如https://cran.r-project.org/web/packages/uplift/uplift.pdf的第27页所述,函数的一个参数可以是x,也可以是一个公式,该公式描述了基于数据帧的模型(参数中的data参数)。 在R中执行第29页的代码时,一切都在运行,没有任何问题。但是,我在rpy2中有一些问题。这是我的代码:
import pandas.rpy.common as com
from rpy2.robjects.packages import importr
from rpy2.robjects import pandas2ri
uplift = importr('uplift')
kwargs = {'n': 1000, 'p' : 20, 'rho' : 0, 'sigma' : np.sqrt(2), 'beta.den': 4}
dd = uplift.sim_pte(**kwargs)
ddPD = pandas2ri.ri2py(dd)
ddPD['treat'] = [1 if x==1 else 0 for x in ddPD['treat']]
dd = com.convert_to_r_dataframe(ddPD)
kwargs2 = {'formula':'y ~ X1 + X2 + X3 + X4 + X5 + X6 + trt(treat)',
'mtry':3,'ntree':200,'split_method':'KL','minsplit':200,'data':dd}
fit1 = uplift.upliftRF(**kwargs2)
然后,我得到一个错误:
^{pr2}$但是,“x”不是函数的强制参数。在
我想对于任何其他有一个参数的R函数来说,这个错误是一样的,而这个参数根本不是强制的。在
谢谢你的帮助!在
接下来,您应该能够使用最常见的方法调用Python函数,因为
^{pr2}$importr
正在“转换”中的命名参数 将R函数定义为语法有效的Python名称。在此时您似乎有一个R
data.frame
。转到pandas
添加列,然后返回R,这是绝对可能的:但是,除非有很好的理由,我建议在}之间穿梭时坚持使用一种转换方案。那个
在}中定义的一致性
可能测试较少。错误
pandas
和{pandas
中定义或在{RRuntimeError: Error: $ operator is invalid for atomic vectors
可能来自于此。在去
pandas
的另一种选择是使用非常有表现力的R包dplyr
。rpy2
自2.7.0版起为其提供定制的接口:你的回答中已经指出,公式应该 声明为(公式是R中的语言对象,但是 在Python语言级别没有对等的语言)。写这个的时候 作为一个常见的Python调用:
相关问题 更多 >
编程相关推荐