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
给定下面的任何 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