首页 > 解决方案 > 如何最好地比较公式?

问题描述

我希望能够比较两个公式。我想知道使用 , 或 deparsed 公式的相等性的优点/缺点/identical()缺陷==

考虑例如

xx <- ~0
environment(xx) <- new.env()

为了清楚起见,我希望公式在语义上是等价的;我不在乎他们的环境。能够进行公式扩展并忽略术语的顺序(例如,so~a*b~b+a+a:b将是等价的)将是一个额外的好处,但这太麻烦了。只要(环境 1)和(环境 2)相同~a+b,我就会满足于不等价。~b+a~a+b~a+b

我确实想到编写一个比较函数,将两个值的环境替换为emptyenv(),然后使用identical(),但这似乎很复杂。

有没有我不应该在这里使用的极端情况/原因==

标签: rformula

解决方案


当我总是尝试identical返回时,它不那么严格。引用其帮助页面:FALSEall.equal

all.equal(x, y)是用于比较 R 对象xy 测试“近似相等”的实用程序。如果它们不同,则仍然进行一定程度的比较,并返回差异报告。

xx <- ~0
environment(xx) <- new.env()

all.equal(xx, ~0)
#[1] TRUE

但在if陈述中,这不应该按原样使用,正确的方法是isTRUE(all.equal(.)). 再次从文档中:

不要all.equal直接在 if 表达式中使用——使用 isTRUE(all.equal(....))或者identical如果合适的话。

isTRUE(all.equal(xx, ~0))
#[1] TRUE

推荐阅读