[R] Subsetting without partial matches

Jonathan Dushoff jdushoff at gmail.com
Sat Jan 31 09:02:56 CET 2009


David:

Thank you for your very valuable response.  In fact, I was trying to 
_avoid_ partial matching, not accomplish it.  Subset is a _much_ better 
way of doing what I was trying to do.

Humorously, however, your code also reproduces the mistake that brought 
me here, AFAICT.  I think my code behaved weirdly because of my use of = 
instead of <<- inside sapply.

With subset, we can avoid that choice altogether.  My new code, which 
appears to work, is:

===

animals <- sapply(unique(Z$id), function(i){
   subset(Z, id==i, select=c(sighting_number, date, age_num))
}, simplify=FALSE)

===

Why should I consider renaming the date column?

----------------------------------------------------------------------
I have not seen you describe the value of doing partial matching in  
this application, so pardon this perhaps non-responsive reply:  
Wouldn't it have been much, much simpler to have used the subset  
function (which returns a dataframe object) at the first assignment to  
donotprint?

Something along the lines of  (untested) :

 > donotprint <- sapply(indivs, function(i){
 >  animals[[i]] = subset(Z, individual_id == i, select =  
 > c(sighting_number, date, age_num) ) }  # reconsider naming variable  
 > "date"

                       )




More information about the R-help mailing list