In the past I have always used is.null() in R to test whether a list contains a specified element. E.g., if I wanted to know whether a list, mylist contained the element x I would have used
is.null(mytest$x)
This failed me today when I tried to test if a list contained an element M when it also contained an element Mtot. Because R completes names of elements in lists, the call mylist$M will return the first element in the list whose name begins with M. This means that if the list contains Mtot (or any other elements whose name starts with M then mylist$M will be TRUE. Here is an example:
> mylist <- list(Mtot = 5)
> is.null(mylist$M)
[1] FALSE
> mylist$M
[1] 5
The (much better) way around this is the function exists. For example:
> exists("M", mylist)
[1] FALSE
> exists("Mtot", mylist)
[1] TRUE