在Python中包装R函数
我想把一个包含在princurve包里的R函数封装起来。用ipython的时候,我可以通过一个ipython单元的R魔法成功做到这一点:
%%R -i X -o s,lambda
fit1<-principal.curve(X)
s <- fit1$s
l <- fit1$lambda
但是我想要一个可以从模块中导入的函数,比如:
from mymodule import principal_curve
s, l = principal_curve(X)
我想我得直接使用rpy,但我不太确定该怎么做……
2 个回答
1
每当一个函数在R语言的包里时,你可以使用 importr
来导入它:
from rpy2.robjects.packages import importr
princurve = importr('princurve')
princurve.principal_curve(X)
3
我不使用R语言,但在这个文档中的例子里,你可以定义一个函数,然后把它导入到Python模块里:
r_mod.py
from rpy2.robjects.packages import SignatureTranslatedAnonymousPackage
string = """
square <- function(x) {
return(x^2)
}
cube <- function(x) {
return(x^3)
}
"""
powerpack = SignatureTranslatedAnonymousPackage(string, "powerpack")
py_mod.py
from r_mod import powerpack
print powerpack.square(3)
[1] 9