查找栏
lme4 包提供findbars:
library(lme4)
fo <- Y~X1+(1|fac1)+(1|fac2)
findbars(fo)
## [[1]]
## 1 | fac1
##
## [[2]]
## 1 | fac2
如果需要字符串,我们可以使用以下。 deparse1 将处理 deparse 失败的某些罕见情况,但如果有必要在 R 4.0.0 之前的 R 版本中工作,deparse 将主要作为替代方案。
sapply(findbars(fo), deparse1)
## [1] "1 | fac1" "1 | fac2"
如果所需的结果是公式的 RHS 但没有固定效应项,那么我们可以通过添加括号并使用 reformulate 来重构上述结果。如果需要公式对象,请省略 [[2]]。以上关于deparse1 的讨论也适用于此处。
reformulate(sprintf("(%s)", sapply(findbars(fo), deparse1)))[[2]]
## (1 | fac1) + (1 | fac2)
术语/标签
获取字符结果的另一种方法是使用labels,它将从terms 中提取它们。如果需要公式,请使用reformulate,如上所述。这不使用任何包。
X <- grep("|", labels(terms(fo)), fixed = TRUE, value = TRUE)
X
## [1] "1 | fac1" "1 | fac2"
如上,公式及其右侧可以从X 生成,如下所示:
reformulate(sprintf("(%s)", X))
reformulate(sprintf("(%s)", X))[[2]]
getTerms
另一种方法是使用Terms of a sum in a R expression 中的getTerms 这个简短的函数递归地遍历公式以提取术语。它不使用任何包。
XX <- grep("|", sapply(getTerms(fo[[3]]), deparse1), fixed = TRUE, value = TRUE)
XX
## [1] "(1 | fac1)" "(1 | fac2)"
公式及其右边可以这样生成:
reformulate(XX)
reformulate(XX)[[2]]