我希望能够比较两个公式。我想知道使用identical()
,==
或等同于所用公式的优点/缺点/陷阱。
考虑例如
xx <- ~0
environment(xx) <- new.env()
xx == ~0
返回TRUE
identical(xx, ~0)
和 identical(xx, ~0, ignore.environment=TRUE)
返回FALSE
(ignore.environment
参数仅在比较闭包时适用 )< / li>
deparse(xx) == "~0"
返回TRUE
(但是,进行解析几乎总是一个坏主意……)为清楚起见,我希望公式等同于;我不在乎他们的环境。能够进行公式扩展并忽略术语顺序(例如,~a*b
和~b+a+a:b
将是等效的)将是一个好处,但这实在是一个麻烦。只要~a+b
(环境1)和~b+a
(环境2)相同,我就保证~a+b
和~a+b
不相等。
我确实想编写一个比较函数,用emptyenv()
替换两个值的环境,然后使用identical()
,但这似乎很麻烦。
有没有极端的案例/原因,我不应该只在这里使用==
吗?
答案 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.equal
或isTRUE(all.equal(....))
(如果适用)。
identical