R 的新手,我正在尝试找到答案,但也许我不知道如何表达这个问题,如果之前有人问过这个问题,很抱歉。
我想在 for 循环中将一系列函数/模型拟合到数据中,而不是手动执行每个。为此,我需要在 中指定模型alist
,列出以下内容:
flist <- alist(y ~ dnorm(mu, sigma),
mu <- a + b*x, # need to replace this line with general function
a ~ dnorm(0, 100),
b ~ dnorm(0, 10),
sigma ~ dunif(0, 10)
)
要在 for 循环中执行此操作,我需要能够替换a + b*x
为在运行时选择的某个函数的主体。所以我想这样做:
flist <- alist(y ~ dnorm(mu, sigma),
mu <- body(function[i]),
a ~ dnorm(0, 100),
b ~ dnorm(0, 10),
sigma ~ dunif(0, 10)
)
但是,似乎 alist 实际上并未评估body(function[i])
,这似乎是alist
. 有没有办法在运行时取出身体?
本质上,我所追求的是要评估 alist 中表达式的一部分(body(...)),但不是全部(保持 ~/<- 运算符未评估)。
有可能做到这一点parse
吗?
我不确定我是否理解,但你需要这样的东西吗?
funs <- list(f1 = function(x) x + 3, f2 = function(x) 2 * x + 2)
flist <- alist(y ~ dnorm(mu, sigma),
mu <- FUN_BODY, # need to replace this line with general function
a ~ dnorm(0, 100),
b ~ dnorm(0, 10),
sigma ~ dunif(0, 10))
flist[[2]] <- eval(substitute(substitute(ARG,
list(FUN_BODY = body(funs[[2]]))),
list(ARG = flist[[2]])))
# [[1]]
# y ~ dnorm(mu, sigma)
#
# [[2]]
# mu <- 2 * x + 2
#
# [[3]]
# a ~ dnorm(0, 100)
#
# [[4]]
# b ~ dnorm(0, 10)
#
# [[5]]
# sigma ~ dunif(0, 10)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句