[R] error using by, Error in tapply(response, list(x.factor, trace.factor), fun) : argument "trace.factor" is missing, with no default

Rolf Turner r.turner at auckland.ac.nz
Mon Apr 20 00:22:41 CEST 2015


On 20/04/15 01:44, John Sorkin wrote:
>
>
> I am receiving an error message from the by function that I don't understand:
> Error in tapply(response, list(x.factor, trace.factor), fun) :
>    argument "trace.factor" is missing, with no default
>
>
>
> My code follows:
>
>
>> summary(ipd)
>   group      values            time      subjects     weaned disp
>   1:55   Min.   :0.0000   Min.   :0   Min.   :115.0   1:65   2:45
>   2:35   1st Qu.:0.1950   1st Qu.:1   1st Qu.:121.0   2:25   3: 5
>          Median :0.3400   Median :2   Median :126.0          4:20
>          Mean   :0.3479   Mean   :2   Mean   :127.6          5:20
>          3rd Qu.:0.5000   3rd Qu.:3   3rd Qu.:134.0
>          Max.   :0.7300   Max.   :4   Max.   :144.0
>          NA's   :48
>> by(ipd[,c("time","subjects","values")],ipd[,"group"],interaction.plot)
> Error in tapply(response, list(x.factor, trace.factor), fun) :
>    argument "trace.factor" is missing, with no default

<SNIP>

The error is not from tapply(), it is from interaction.plot().  You 
cannot supply a dataframe to this function, you must supply the three
arguments x.factor, trace.factor and response.

You could do:

  by(ipd[,c("time","subjects","values")],ipd[,"group"],
     function(x){names(x) <- c("x.factor","trace.factor",
                               "response");
     do.call(interaction.plot,x)})


There are several other ways of organizing the syntax, but somehow you 
have to make the arguments to interaction.plot() explicit.

I was somewhat surprised to find that do.call() does not work with 
positional matching of arguments.  I.e.

by(ipd[,c("time","subjects","values")],ipd[,"group"],
     function(x){do.call(interaction.plot,x)})

does *not* work.  The names of "x" have to match the names of the 
arguments to interaction.plot().

I'm sure this makes sense .... but I don't understand it.

cheers,

Rolf Turner

-- 
Rolf Turner
Technical Editor ANZJS
Department of Statistics
University of Auckland
Phone: +64-9-373-7599 ext. 88276
Home phone: +64-9-480-4619



More information about the R-help mailing list