2013-06-27 30 views
2

我想測試一個列表是否包含一個對象(github source)。這個is.null函數迄今爲止工作,除非我正在測試一個名稱與non-nul項目部分匹配的項目。爲什麼is.null對於不存在的列表元素返回false?

x <- list(ab = 1) 

is.null(x$ab) 
[1] FALSE  ## expected 
is.null(x$b) 
[1] TRUE  ## expected 
is.null(x$c)  
[1] TRUE  ## expected 
is.null(x$a) 
[1] FALSE  ## unexpected 

這是is.null函數的預期行爲嗎?我沒有在文檔中看到任何跡象。

使用exists函數或其他方法會更好嗎? (我沒有用exists,因爲它不會在一個循環的工作就像for(i in 'a') is.null(x[[i]])

回答

7

看看x$a。這將返回1由於部分名稱匹配。因此is.null(x$a)FALSE由於R匹配aab。如果您使用[[表示法,你會得到預期的結果:is.null(x[['a']])

+1

明白了,正如這裏的評論所解釋的:http://stackoverflow.com/q/16630087/199217 –