R语言【stats】——as.formula():取已包含在其他对象中的公式的方法,额外保存属性

Package stats version 4.2.0


Description

泛型函数 formula 及其特定方法提供了一种提取包含在其他对象中的公式的方法。
as.formula几乎相同,另外当对象已经继承了**"formula"** 时,保留了属性。


Usage

R 复制代码
formula(x, ...)
DF2formula(x, env = parent.frame())
as.formula(object, env = parent.frame())

## S3 method for class 'formula'
print(x, showEnv = !identical(e, .GlobalEnv), ...)

Arguments

参数【x】:R 对象,为 DF2formula() 的一个 data.frame。

参数【object】:同参数【x】。

参数【...】:传递给或来自其他方法的进一步参数。

参数【env】:与结果相关联的环境(如果不是公式的话)

参数【showEnv】:逻辑指示是否也应该打印环境。


Details

例如,由 lm 和 glm 函数拟合的模型以紧凑的符号形式指定。~ 运算符是形成这类模型的基础。y ~ model 形式的表达式被解释为响应 y 由一个由 model 符号指定的线性预测器来建模的说明。这样的模型由一系列用 + 操作符分隔的项组成。术语本身由**:**操作符分隔的变量名和因子名组成。这样的术语被解释为术语中出现的所有变量和因素的相互作用。

除了 **+**和 **:**之外,还有许多其他运算符在模型公式中很有用:

  • * 运算符表示因子交叉:a*b 被解释为 a + b + a:b。
  • ^ 运算符表示交叉到指定的度数。例如 (a+b+c)^2 与**(a+b+c)*(a+b+c)** 相同,这反过来扩展为包含 a , b 和 c 的主要效果及其二阶相互作用的公式。
  • %in% 操作符表示其左侧的项嵌套在右侧的项中。例如, a + b %in% a 展开为公式 a + a:b。
  • **/**运算符提供了一种简写,因此 a / b 相当于 a + b %in% a。
  • - 运算符删除指定的项,因此 (a+b+c)^2 - a:b 等于 a+b+c +b:c + a:c 。它也可以用来去除截距项:当拟合线性模型时,y ~ x - 1 指定一条穿过原点的直线。没有截距的模型也可以指定为y ~ x + 0 或 y ~ 0 + x。

虽然公式通常只涉及变量和因子名称,但它们也可能涉及算术表达式。公式 log(y) ~ a + log(x) 是很合理的。当这样的算术表达式包含在模型公式中也象征性地使用的运算符时,可能会混淆算术和符号运算符的使用。

为了避免这种混淆,可以使用函数 I() 将模型公式中按算术意义使用运算符的部分括起来。例如,在公式 y ~ a + I(b+c) 中,b+c 项被解释为 b 和 c 的和。

变量名可以在公式中**`like this`**用反引号括起来,尽管不能保证所有使用公式的代码都接受这样的非语法名称。

大多数模型拟合函数接受带有右侧的公式,其中包括函数偏移量,以表示具有固定系数为 1 的项。一些函数接受其他 "特殊",如 strata 或 cluster。

在公式中,. 有两种特殊的解释,通常是在模型拟合函数的数据参数上下文中,意思是 "公式中所有列,除此之外":见 terms.formula ,在 update.formula 上下文中,它的意思是"之前在公式的这一部分的内容"。

当在拟合模型对象上调用公式时,使用特定的方法 (例如类 "nls" 的方法) 或默认方法。默认值首先查找对象的 "formula" 组件 (并计算它),然后是 "terms" 组件,然后是调用的公式参数 (并计算其值),最后是 "formula" 属性。

数据帧有一个公式方法。当有带有公式的**"terms"** 属性时,例如,对于 model.frame(),将返回该公式。如果你想要前面的 (R ≤3.5.x) 的行为,则使用不考虑 "terms" 属性的辅助 DF2formula()。否则,如果只有一列,则会形成带有空 LHS 的 RHS 。对于更多列,第一列是公式的 LHS ,其余列以 + 分隔,形成 RHS。


Value

以上所有的函数都会产生一个 "formula" 类的对象,其中包含一个符号模型公式。

相关推荐
weixin_3077791333 分钟前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
一水鉴天4 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
Frank_refuel4 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
Wang's Blog5 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
2601_962071575 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
\光辉岁月/6 小时前
5.java-数组
java·开发语言
Java后端的Ai之路6 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
谢亮_vipxieliang6 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
时间的拾荒人7 小时前
Qt 多线程详解:从 QThread 到实战
开发语言·qt·面试
郑州光合科技余经理7 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程