15

有没有办法在 R 语言中测试两个对象是否相同?

为清楚起见:我并不是指identical函数意义上的相同,它根据某些属性(如数值或逻辑值等)比较对象。

我对对象标识非常感兴趣,例如可以使用isPython 语言中的运算符对其进行测试。

4

2 回答 2

28

更新:在data.table v1.8.9中添加了一个更健壮和更快的address(x)(不使用.Internal(inspect(x)))实现。来自新闻

新函数address()返回其参数在 RAM 中的地址。有时在以编程方式确定值是否已被 R 复制时很有用。


可能有一种更简洁的方法,但这似乎有效。

address = function(x) substring(capture.output(.Internal(inspect(x)))[1],2,17)
x = 1
y = 1
z = x
identical(x,y)
# [1] TRUE
identical(x,z)
# [1] TRUE
address(x)==address(y)
# [1] FALSE
address(x)==address(z)
# [1] TRUE

您可以通过更改179.

于 2012-06-06T11:27:43.233 回答
3

您可以使用该pryr软件包。

例如,返回mtcars对象的内存位置:

pryr::address(mtcars)

然后,对于变量ab,您可以检查:

address(a) == address(b)
于 2017-09-01T14:02:43.103 回答