【发布时间】:2020-12-29 01:59:37
【问题描述】:
假设我有一个名为bb 的对象列表。我想在bb 中挑选每个唯一的元素对 并在some kind of function(称为convolve)中使用它们,如下所示:
## Below `bb` elements: `bma1` & `bma2` are used in the function:
con <- convolve(dens1= bb$bma1$dposterior,
dens2= function(x){bb$bma2$dposterior(-x)},
cdf1= bb$bma1$pposterior,
cdf2= function(x){1 - bb$bma2$pposterior(-x)})
con$quantile(c(0.025, 0.975))
问题:
bb可以有任意数量的元素,但convolve()一次只接受两个元素,我想知道如何遍历bb列表的元素,这样所有bb中的唯一对(在此示例中:bma1&bma2;bma1&bma3;bma2 & bma3)被输入到convolve()?
这是一个可重现的代码:
library("metafor")
library("bayesmeta")
dat <- escalc(measure="OR", ai=lh.le, bi=lh.re, ci=rh.le,
di=rh.re, data=dat.bourassa1996, add=1/2, to="all")
bma1 <- bayesmeta(dat[dat$sex=="combined",])
bma2 <- bayesmeta(dat[dat$sex=="male",])
bma3 <- bayesmeta(dat[dat$sex=="female",])
bb <- list(bma1 = bma1, bma2 = bma2, bma3 = bma3)
# The function (`source` if needed for full reproducibility)
source('https://raw.githubusercontent.com/rnorouzian/m/master/co.r')
con <- convolve(dens1= bb$bma1$dposterior,
dens2= function(x){bb$bma2$dposterior(-x)},
cdf1= bb$bma1$pposterior,
cdf2= function(x){1 - bb$bma2$pposterior(-x)})
con$quantile(c(0.025, 0.975))
【问题讨论】:
-
可能想看看
?outer -
其实
?combn在这里可能更有用。简化为矩阵,然后在结果上使用apply()。
标签: r function loops for-loop purrr