R对象标识

时间:2012-06-06 10:50:43

标签: r object identity

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

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

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

2 个答案:

答案 0 :(得分:24)

更新:在data.table v1.8.9中添加了address(x)(不使用.Internal(inspect(x)))更强大,更快速的实施。来自NEWS

  

新函数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

您可以将17更改为9,将其修改为32位。

答案 1 :(得分:2)

您可以使用pryr包。

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

pryr::address(mtcars)

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

address(a) == address(b)