R中的模型公式运算符创建什么数据结构?

R中的模型公式运算符创建什么数据结构?,r,R,多次提到模型公式操作符,但未能定义或解释有关公式类的任何内容 我很难从官方或非官方来源找到任何记录~operator语义的东西 特别是,我对以下信息不感兴趣(“形式y~模型的表达式被解释为响应y由模型象征性指定的线性预测器建模的规范”)或使用场景,我想了解我在使用它时创建的是什么样的数据结构,以及如何在REPL上检查和分析它。不知道这是否有帮助,但是:它是一种语言对象-即R解析输入,但不尝试评估任何组件-使用类“公式” >f str(f) “公式”类语言a~b+(c+d) ..-attr(*,“

多次提到模型公式操作符,但未能定义或解释有关公式类的任何内容

我很难从官方或非官方来源找到任何记录~operator语义的东西


特别是,我对以下信息不感兴趣(“形式y~模型的表达式被解释为响应y由模型象征性指定的线性预测器建模的规范”)或使用场景,我想了解我在使用它时创建的是什么样的数据结构,以及如何在REPL上检查和分析它。

不知道这是否有帮助,但是:它是一种
语言
对象-即R解析输入,但不尝试评估任何组件-使用类“公式”

>f str(f)
“公式”类语言a~b+(c+d)
..-attr(*,“.Environment”)=
如果您想使用这些对象,您需要知道它基本上存储为树,其中父节点、运算符或函数(
~
+
)可以提取为第一个元素和子节点(与函数/运算符的“arity”数量相同)可提取为元素2..n,即

  • f[[1]]
    ~
  • f[[2]]
    a
    (第一个参数,即公式的LHS)
  • f[[3]]
    b+(c+d)
  • f[[3]][[1]]
    +
  • f[[3][[2]]
    is
    b
……等等

关于哈德利·威克姆作品中的表达的章节给出了更完整的描述

在R语言手册中也讨论了这一点,例如


@user2554330指出,公式通常也有相关的环境;也就是说,它们携带一个指向创建它们的环境的指针

任何关于这个问题更合适的标题的建议都可以。操作员帮助文件是
?`~`
?tilde
,非常简短,
如.list(y~x)
将向您显示运算符、左侧和右侧是
?名称
对象或符号。不确定您还需要查找什么,公式不是很复杂,更适用于引用对象而无需评估。我没有投票关闭。也许您可以编辑为“我如何使用“公式”类的对象”?另一个重要方面是附加的环境。使用公式的函数通常有一个
data
参数,并首先在
data
中查找公式变量,然后在公式的环境中查找(递归,因为环境有父项)。当您创建公式对象时,环境就是您正在使用的环境(这会使在函数中创建公式的人感到困惑)。因此,这实际上只是一个符号编程工具,进一步的语义(至少是波浪线)仅由处理公式的代码叠加?我不太确定您的定义是什么“符号编程工具”是,但其余部分似乎是正确的。R公式的主要使用者是
model.matrix()
model.frame()
,尽管它们在其他上下文中使用(例如统计测试,如
t.test()
lattice
ggformula
包)