[R] offlist Re: Svy function doesn't work nested in user-defined function

David Winsemius dwinsemius at comcast.net
Thu May 20 22:55:32 CEST 2010


On May 20, 2010, at 4:47 PM, David Winsemius wrote:

>
> On May 20, 2010, at 4:44 PM, David Winsemius wrote:
>
>>
>> On May 20, 2010, at 4:32 PM, David Winsemius wrote:
>>
>>>
>>> On May 20, 2010, at 11:24 AM, Sabatier, Jennifer F. (CDC/OID/ 
>>> NCHHSTP) wrote:
>>>
>>>>
>>>> Hi R-help,
>>>>
>>>> I posted about this late yesterday but got no response. I may  
>>>> have put
>>>> TMI in the original request.  Not to mention I couldn't cut and  
>>>> paste
>>>> yesterday because I was working R off a non-network computer while
>>>> asking for help on a network computer.
>>>>
>>>>
>>>> Essentially, I have this user-defined function:
>>>>
>>>> test <- function(X){
>>>>
>>>> 			
>>>>         	chisq <- svychisq(~X + SEX, design=audit,
>>>
>>> Did you really have a variable name "X" inside the object that you  
>>> are giving a temporary name of "X" to. Seems confusing if that  
>>> were your choice.
>>>
>>>> statisic="adjWald", round=4)
>>>> 			
>>>> }
>>>>
>>>> test(con)
>>>>
>>>
>>> I do not know the answer, but I'm not sure that anyone including  
>>> Lumley could answer it with the proffered information:
>>>
>>> Perhaps you should include the code used to create "audit" as well  
>>> as the results of str() on the data argument to design when audit  
>>> was created. I am guessing that "SEX" is not available inside the  
>>> function and that you should have written:
>>>
>>> test <- function(Z){ 			
>>>         	chisq <- svychisq(~X + SEX, design=Z,
>>>                                  statistic="adjWald", round=4)
>>> 			
>>> }
>>
>> Oh, heck. Forgot to trim the address list. Looking at this again, I  
>> think I see the OP's intent better. I still do not have the answer,  
>> but believe the OP needs to construct a valid formula object if she  
>> intends to pass only a column name to her function. Perhaps  
>> something along the lines of:
>>
>> test <- function(Z){ 			
>>         fmla <- as.formula( paste(" ~ ", paste(X, "SEX", collapse=  
>> "+"))))
>
> Er, Better might be:
>
> fmla <- as.formula( paste(" ~ ", paste(c(Z, "SEX"), collapse= "+")))
>
>>         chisq <- svychisq( fmla, design=audit,
>>                                  statistic="adjWald", round=4)
>> 			
>> }
>>
>> test(con)

Almost. Testing with the examples on svytable help page:

  test <- function(Z){ 			
     fmla <- as.formula( paste(" ~ ", paste(c(Z, "stype"), collapse=  
"+")))
     chisq <- svychisq( fmla, design=rclus1,
                                   statistic="adjWald", round=4)
  }

  reslt <- test("sch.wide")
  reslt

	Design-based Wald test of association

data:  svychisq(fmla, design = rclus1, statistic = "adjWald", round = 4)
F = 2.2296, ndf = 2, ddf = 13, p-value = 0.1471

The "con" object probably does not exist, so one needs to pass a  
character name to the formula.

--


>>
>>
>>>
>>>
>>> -- 
>>> David.
>>>
>>>
>>>>
>>>>
>>>> "con" is a data variable in my design object audit.
>>>>
>>>> When I just run:
>>>>
>>>> chisq <- svychisq(~X + SEX, design=audit, statisic="adjWald",  
>>>> round=4)
>>>>
>>>> It works just fine.
>>>>
>>>> It's only when it's nested in the function test() that it falls  
>>>> apart.
>>>>
>>>> I get this error:
>>>>
>>>> Error in `[.data.frame`(design$variables, , as.character(rows)) :
>>>> undefined columns selected
>>>>
>>>>
>>>> How can I solve this problem?
>>>>
>>>> Thanks,
>>>>
>>>> Jen (obviously a new R-user, as of late 2009)
>

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list