在Python中包装R函数

2 投票
2 回答
3296 浏览
提问于 2025-04-18 16:39

我想把一个包含在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

撰写回答