简体   繁体   English

通过 python 中的 rpy2 在 BLME r package 中传递自定义 function

[英]Passing a custom function in BLME r package via rpy2 in python

Issue: In Python, I am trying to pass a dnorm() R function to the argument cov.prior of the R package called Blme .问题:在 Python 中,我试图将dnorm() R function 传递给名为Blme 的 R package 的参数 cov.prior cov.prior The example is written on page 4 for the custom prior.该示例写在第 4 页,用于自定义先验。 I wanted to use Gaussian as my covariance prior distribution, but I don't know how to wrap the dnorm() function with the custom() in order to make it work.我想使用高斯作为我的协方差先验分布,但我不知道如何用custom() () 包装dnorm() function 以使其工作。

Here is my attempt 1这是我的尝试 1

from rpy2 import robjects 
from rpy2.robjects.packages import importr

stats = importr("stats")
blme = importr("blme")
lmc = robjects.r(f"lmerControl({control})")
dnorm = stats.dnorm
covprior = robjects.r(f"custom({dnorm})")
blme.blmer(formula, data=data, REML=REML, control=lmc, contrasts=contrasts, **{cov.prior=covprior})

Here is my attempt 2这是我的尝试 2

from rpy2 import robjects 
from rpy2.robjects.packages import importr

stats = importr("stats")
blme = importr("blme")
lmc = robjects.r(f"lmerControl({control})")
robjects.r(''' penalityFn <- function(sigma){dnorm(sigma, 1, 1)}''')
covprior = robjects.r(f"custom({penalityFn})")
blme.blmer(formula, data=data, REML=REML, control=lmc, contrasts=contrasts, **{cov.prior=covprior})

I figured it out.我想到了。

from rpy2 import robjects 
from rpy2.robjects.packages import importr
blme = importr("blme")
lmc = robjects.r(f"lmerControl({control})")
r_string = robjects.r("""penalityFn <- function(sigma){dnorm(sigma, 1, 1)}""")
covprior = ("custom(penalityFn)")
blme.blmer(formula, data=data, REML=REML, control=lmc, contrasts=contrasts, **{cov.prior=covprior})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM