[R] Subsetting without partial matches

David Winsemius dwinsemius at comcast.net
Fri Jan 30 17:23:03 CET 2009


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"

                       )


-- 
David Winsemius

On Jan 30, 2009, at 7:46 AM, Jonathan Dushoff wrote:

> I have a list of observations of individuals.  I would like to make  
> a list of individuals, with a data frame of observations for each  
> individual.
>
> The following code usually works, but not always
>
> ----------------------------------------------------------------------
>
> # Make a list of empty data frames
> animals = list()
> indivs = levels(Z$individual_id)
> donotprint <- sapply(indivs, function(i){
>  animals[[i]] = data.frame()
> })
>
> # Add observations of each animal to the appropriate frame
> donotprint <- apply(Z, 1, function(r){
>  ind = r[["individual_id"]]
>  bind = ind # Use different names to confirm that the partial  
> matching is being done on the left
>
>  animals[[bind]]$sighting_number <<-
>     c(animals[[ind, exact=TRUE]]$sighting_number,  
> r[["sighting_number"]])
>  animals[[bind]]$date<<-
>     c(animals[[ind, exact=TRUE]]$date, r[["date"]])
>  animals[[bind]]$age <<-
>     c(animals[[ind, exact=TRUE]]$age, r[["age_num"]])
> })
>
> ----------------------------------------------------------------------
>
> The problem is partial matching.  When it gives the wrong answer, it  
> gives partial match warnings.  Adding "exact=TRUE" to the left, the  
> way that I added it to the right, simply produces an argument  
> error.  Changing to single brackets produces other errors.
>
> I read the help, and the Language Definition (not the whole thing),  
> but could not find clear documentation of what single brackets with  
> character variable arguments are supposed to do in lists, nor of how  
> partial matching is handled on the left side of an assignment, nor  
> of whether R is supposed to do partial-match indexing when an exact  
> match is available (I would have thought not, and it's documented  
> that it's not supposed to for function arguments).
>
> I am interested in how the subsetting is supposed to work, but even  
> more in what might be the best way to code this sort of thing in R.
>
> I am using R 2.6.2 on Mandriva linux.
>
> Thanks for any help,
>
> JD
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list