R 中的子集公式对象

Subsetting formula objects in R

给定下面的任何 formula 对象(例如,f),我想知道如何将 波浪号 一切分开在它 之后并将其转换为 formula 对象?

我的期望输出仅在这个例子中是:~ es.type+weeks作为一个formula对象。

注意: f 可以是任何公式,上面的 f 只是一个例子。我正在寻找通用解决方案。

f <- formula(dint ~ es.type+weeks) # Only as an example

g <- paste0(f[[1]], f[[3]]) # No success

as.formula(g)    # No success

一个选项是根据公式中的项数删除项

g <- formula(drop.terms(terms(f), 3))
g
#~es.type + weeks

f1 <- formula(dint ~ es.type:weeks)
formula(drop.terms(terms(f1), 3))
#~es.type:weeks

最好创建一个函数来应用不同的公式

form1 <- function(form) {
      i1 <- length(terms(form)) + 1
       formula(drop.terms(terms(form), i1))

 }
f1 <- formula(dint ~ es.type+weeks+dd)
f2 <- formula(dint ~ es.type+weeks) 
form1(f1)
#~es.type + weeks + dd
form1(f2)
#~es.type + weeks

如果我们需要添加一个新词

update(form1(f2), ~time +.)
#~time + es.type + weeks

直接操作公式即可:

f <- y ~ x1 + x2:x3

f[[2]] <- f[[3]]
f[[3]] <- NULL

identical(f, ~ x1 + x2:x3)
# TRUE