[R] Passing parameter to a function

Bert Gunter gunter.berton at gene.com
Mon Dec 20 20:38:26 CET 2010


Duncan's solution works for me. I strongly suspect that you have not
read the Help file for xtabs carefully enough. Does the "time" column
in D consist of a vector of counts?

> A <- factor(c("A","A","B","B"))

>  B <- factor(c(1,2,1,2))

>  D <- data.frame(A,B)
>  D$time <- c(10,12,14,16)

> tab(A,B)
   B
A    1  2
  A 10 12
  B 14 16

-- Bert


On Mon, Dec 20, 2010 at 11:02 AM, Luca Meyer <lucam1968 at gmail.com> wrote:
> Hi Duncan,
>
> Yes, A and B are columns in D. Having said that I and trying to avoid
>
> tab(D$A,D$B)
>
> and I would prefer:
>
> tab(A,B)
>
> Unfortunately the syntax you suggest is giving me the same error:
>
> Error in eval(expr, envir, enclos) : object "A" not found
>
> I have tried to add some deparse() but I have got the error over again. The last version I have tried:
>
> function(x,y){
>    z <- substitute(time ~ x + y, list(x = deparse(substitute(x)), y = deparse(substitute(y))))
>    xtabs(z, data=D)
>
> gives me another error:
>
> Error in terms.formula(formula, data = data) :
>  formula models not valid in ExtractVars
>
> Any idea on how I should modify the function to make it work?
>
> Thanks,
> Luca
>
>
> Il giorno 20/dic/2010, alle ore 19.28, Duncan Murdoch ha scritto:
>
>> On 20/12/2010 1:13 PM, Luca Meyer wrote:
>>> I am trying to pass a couple of variable names to a xtabs formula:
>>>
>>> >  tab<- function(x,y){
>>>     xtabs(time~x+y, data=D)
>>> }
>>>
>>> But when I run:
>>>
>>> >  tab(A,B)
>>>
>>> I get:
>>>
>>> Error in eval(expr, envir, enclos) : object "A" not found
>>>
>>> I am quite sure that there is some easy way out, but I have tried with different combinations of deparse(), substitute(), eval(), etc without success, can someone help?
>>
>> I assume that A and B are columns in D?  If so, you could use
>>
>> tab(D$A, D$B)
>>
>> to get what you want.  If you really want tab(A,B) to work, you'll need to do messy work with substitute, e.g. in the tab function, something like
>>
>> fla <- substitute(time ~ x + y, list(x = substitute(x), y = substitute(y))
>> xtabs(fla, data=D)
>>
>> Duncan Murdoch
>
> ______________________________________________
> 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.
>



-- 
Bert Gunter
Genentech Nonclinical Biostatistics



More information about the R-help mailing list