通过python中的rpy2传递BLME r包中的自定义函数



问题:在Python中,我试图将dnorm()R函数传递给名为Blme的R包的参数cov.prior。该示例写在第4页上,用于自定义先验。我想使用高斯作为我的协方差先验分布,但我不知道如何用custom()包裹dnorm()函数才能使其工作。

这是我的尝试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})

这是我的尝试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})

我想明白了。

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})

最新更新