有沒有辦法測試兩種對象在R語言中是否相同?R對象標識
爲了清楚:我並不意味着在identical
功能的意義上,這 基於像我在對象標識真正感興趣的數值或邏輯值等
某些特性進行比較的對象是相同的,例如可以使用Python語言中的is
運算符進行測試。
有沒有辦法測試兩種對象在R語言中是否相同?R對象標識
爲了清楚:我並不意味着在identical
功能的意義上,這 基於像我在對象標識真正感興趣的數值或邏輯值等
某些特性進行比較的對象是相同的,例如可以使用Python語言中的is
運算符進行測試。
UPDATE:一個更強大,更快地實現的address(x)
(不使用.Internal(inspect(x))
)加入到data.table v1.8.9。從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位工作。
這很有趣。你知道我在哪裏可以讀到更多關於R實際創建新對象的時間以及它何時指向內存中的現有對象? – Roland
@Roland Hm。我認爲這很容易搜索和找到一些鏈接,但似乎沒有。我發現的所有內容都是[R內部的第1.1.2節](http://cran.r-project.org/doc/manuals/R-ints.html#Rest-of-header)按價值錯覺實施。我傾向於嘗試使用tracemem和內部(檢查(...))來制定複製時間。這樣做導致[這篇文章到r-devel](http://r.789695.n4.nabble.com/Confused-about-NAMED-tp4103326.html),這可能會提供更多的線索。 –
謝謝。 r-devel上的線程非常有趣,我相信我從中學到了一些東西,儘管它略高於我目前的編程教育水平。 :) – Roland
對於那些不熟悉Python,你能詳細說明你如何定義身份(或說同一性)?在嚴格意義上,對象只能與自身相同。這個測試的預期用途是什麼? – Roland
你是指對象類嗎?例如'is.numeric'? – Andrie
@Andrie和Roland:我的意思是主存中同一地址的意義。例如,在像Python或Java這樣的通用語言中,我可以做類似(模語法) b = new Object() c = b 在這種情況下,b和c指向相同的對象。 –