如何最好地比较公式?

时间:2019-03-28 14:34:52

标签: r formula

我希望能够比较两个公式。我想知道使用identical()==或等同于所用公式的优点/缺点/陷阱。

考虑例如

xx <- ~0
environment(xx) <- new.env()
  • xx == ~0返回TRUE
  • identical(xx, ~0) identical(xx, ~0, ignore.environment=TRUE)返回FALSEignore.environment参数仅在比较闭包时适用 )< / li>
  • deparse(xx) == "~0"返回TRUE(但是,进行解析几乎总是一个坏主意……)

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

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

有没有极端的案例/原因,我不应该只在这里使用==吗?

1 个答案:

答案 0 :(得分:1)

LocalStorage返回identical时,我总是尝试FALSE,它的严格程度要低得多。引用其帮助页面:

  

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

y

但是在xx <- ~0 environment(xx) <- new.env() all.equal(xx, ~0) #[1] TRUE 语句中不应原样使用,正确的方法是if。再次来自文档:

  

请勿在if表达式中直接使用isTRUE(all.equal(.))-两者都使用   all.equalisTRUE(all.equal(....))(如果适用)。

identical