问题:在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})