gpt4 book ai didi

r - 如何使用更新将前缀添加到公式的右侧?

转载 作者:行者123 更新时间:2023-12-04 02:17:56 24 4
gpt4 key购买 nike

假设我有一个 Formula 的列表:

library(Formula)
models <- list(y ~ x1, y ~ x2, y ~ x3)
models <- lapply(models, as.Formula)

然后说我想将它们更新为 y ~ 1 | x1 | 1, y ~ 1 | x2 | 1y ~ 1 | x3 | 1(例如,使用 mnlogit)。如果我将 updatelapply 一起使用,我可以添加 | 1 到最后:

lapply(models, update, . ~ . | 1)  # Works as expected
# [[1]]
# y ~ x1 | 1
#
# [[2]]
# y ~ x2 | 1
#
# [[3]]
# y ~ x3 | 1

但我无法将 1 | 添加到开头:

lapply(models, update, . ~ 1 | . | 1)  # Fails -- why is the dot not replaced?
# [[1]]
# y ~ 1 | . | 1
#
# [[2]]
# y ~ 1 | . | 1
#
# [[3]]
# y ~ 1 | . | 1

有谁知道这是为什么,或者如何修复它(当然,除了一个一个地修复每个模型)?

最佳答案

至于主要问题:如何设置公式

我建议先添加两个额外的拦截部分,然后重新排序右侧:

f <- y ~ x2
ff <- update(Formula(f), . ~ . | 1 | 1)
formula(ff, rhs = c(2, 1, 3))
## y ~ 1 | x2 | 1

然后是关于:为什么更新只适用于 .在第一部分?

您希望此代码返回相同的结果:

f <- y ~ x2
update(Formula(f), . ~ 1 | . | 1)
## y ~ 1 | . | 1

但显然不是。原因很简单:update() 方法循环遍历所有左侧和右侧部分。此处,第一个右侧部分 x2 更新为 1。右侧第二个部分为空(f 只有一个右侧),因此更新为 .。类似地,对于第三部分。

如果原始公式中恰好有一个右侧,则可以实现您的方法。但是对于几个部分,这将是一团糟。例如,

update(Formula(y ~ x1 | x2 | x3), . ~ . + z1 | 1 | . - x3)
## y ~ x1 + z1 | 1 | 1

关于r - 如何使用更新将前缀添加到公式的右侧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32895966/

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