根据上下文,该符号|
表示不同的含义:
一般情况
通常,|
表示 OR。通用建模函数将任何|
视为逻辑运算符并执行它。这相当于使用另一个运算符,例如^
:
lm(y~ x + x^2)
先执行算子,然后用这个新变量来构建模型矩阵并进行拟合。
在您的代码中,|
也意味着 OR。您必须记住,当您使用任何逻辑运算符时,R 也将数值解释为逻辑值。0 被视为 FALSE,任何其他都被视为 TRUE。
因此,您的调用lm
构建了 y 的函数中的模型x OR z
。这没有任何意义。给定 的值x
,这将是y ~ TRUE
。这也是您的模型不适合的原因。您的模型矩阵有 2 列,其中 1,一列用于截距,一列用于 中的唯一值x|z
,即TRUE
。因此,您的系数x|z
甚至无法计算,如输出所示:
> lm(y ~ x|z)
Call:
lm(formula = y ~ x | z)
Coefficients:
(Intercept) x | zTRUE
-0.01925 NA
混合模型的内部公式
在混合模型(例如lme4
包)中,|
用于表示随机效应。类似的术语+ 1|X
意味着:“为 X 中的每个类别拟合随机截距”。您可以将其翻译|
为“给定的”。因此,您可以将术语视为“在给定 X 的情况下拟合截距”。如果您牢记这一点,那么在or中使用|
相关结构的规范对您来说更有意义。nlme
mgcv
您仍然必须小心,因为|
解释的确切方式很大程度上取决于您使用的包。因此,真正了解它在您使用的建模功能的上下文中的含义的唯一方法是在该软件包的手册中进行检查。
其他用途
还有一些其他函数和包|
在公式界面中使用该符号。同样在这里,它几乎可以归结为指示某种组。一个例子是|
在点阵图形系统中的使用。在那里它用于分面,如以下代码所示:
library(lattice)
densityplot(~Sepal.Width|Species,
data = iris,
main="Density Plot by Species",
xlab="Sepal width")