gpt4 book ai didi

r - 如何使 lm 在其输出中显示作为变量传递给它的公式

转载 作者:行者123 更新时间:2023-12-04 09:13:59 25 4
gpt4 key购买 nike

请考虑以下示例代码(来自 lm 文档):

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)
lm(weight ~ group)
form1 <- weight ~ group
lm(form1)
do.call("lm",list(formula=form1))

具有以下(缩写)输出:
> lm(weight ~ group)

Call:
lm(formula = weight ~ group)

> lm(form1)

Call:
lm(formula = form1)

> do.call("lm",list(formula=form1))

Call:
lm(formula = weight ~ group)

如您所见,对 lm 的第二次调用不显示公式,而是显示包含公式的变量。经过一些实验,我想出了第三个解决方案,但我觉得那个有点乏味。

因此问题是 :是否有另一种方法可以让 lm 显示公式而不是变量(即不使用我上面使用的 do.call 方法)。

(我想要这个的原因是我正在处理一个 Sweave 文档,所以我看不到调用,只能看到输出,然后让 lm 告诉你它使用的公式非常方便。)

更好的解决方案 -
感谢@Aaron
lm <- function(...) {
mf <- match.call()
mf[[1]] <- quote(stats::lm)
env <- parent.frame()
mf$formula <- eval(mf$formula, env)
eval(mf, env)
}

解决方案:
根据 G. Grothendieck 的回答,我想出了以下功能:
lm <- function(...) {
mf <- match.call()
mf[[1]] <- quote(stats::lm)
env <- parent.frame()
fm <- eval(mf, env)
fm$call$formula <- formula(fm)
fm
}

最佳答案

把它放在你的 Sweave 文件顶部附近:

<<preliminaries,echo=FALSE,results=hide>>=
lm <- function(fo, ...) { fm <- stats::lm(fo, ...); fm$call <- fo; fm }
@

然后在文件的其余部分正常调用 lm

使用问题中的示例并假设我们已经定义了 lm 如上:
> lm(form1)

Call:
weight ~ group

Coefficients:
(Intercept) groupTrt
5.032 -0.371

关于r - 如何使 lm 在其输出中显示作为变量传递给它的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9923722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com