R对象标识

Sve*_*ger 14 identity r object

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

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

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

Mat*_*wle 25

更新: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
Run Code Online (Sandbox Code Playgroud)

您可以通过更改17为修改它以在32位上工作9.

  • 实际上,垃圾收集可以在获取地址和反向调用之间获得对象.这可能会使程序崩溃,或者更糟糕的是,返回一个不相关的对象.因此,与"地址"相反的声音听起来真的很糟糕. (3认同)
  • 是否有可能写出"地址"的倒数? (2认同)