[R] debugging R code and dealing with dependencies

Mike Miller mbmiller+l at gmail.com
Fri Dec 26 04:16:17 CET 2014


On Thu, 25 Dec 2014, David Winsemius wrote:

>> On Dec 25, 2014, at 1:04 AM, Mike Miller <mbmiller+l at gmail.com> wrote:
>>
>> I just wanted to put this out there.  It's just some of my observations 
>> about things that happen with R, or happened in this particular 
>> investigation.  There were definitely some lessons for me in this, and 
>> maybe that will be true of someone else.  The main thing I picked up is 
>> that it is good to put plenty of checks into our code -- if we expect 
>> input of a certain type or class, then I should either coerce input 
>> into that structure or test the input and throw an error.  If the 
>> function works very differently for different kinds of input, this 
>> should be documented.  The more people are doing this, the better 
>> things will go for everyone.
>>
>>
>> I was working with a CRAN package called RFGLS...
>>
>> http://cran.r-project.org/web/packages/RFGLS/index.html
>>
>> ...and I was getting an error.  After a few rounds of testing I 
>> realized that the error was caused by a FAMID variable that was of 
>> character type.
>
> But The Details section of the help page does say that the accepted 
> FTYPES are all integers between 1 and 6 and the INDIV variables are 
> integers in range 1:4.

But FAMID and FTYPE are different variables, both required.


>> The problem seemed to be that gls.batch() expected FAMID to be 
>> integers, but the default ought to be character type because family and 
>> individual IDs in nearly all genetic-analysis software are character 
>> strings (they might even be people's names).
>
> You are making up rules that were not in accord with the documentation.

I think you are confusing FTYPE with FAMID.


>> This was the error:
>>
>> Error in sum(blocksize) : invalid 'type' (character) of argument
>> Calls: gls.batch -> bdsmatrix
>>
>> To figure out more about it, I spent a bunch of time to go from CMD 
>> BATCH mode to an interactive session so that I could look at 
>> traceback().
>
> Generally the first thing to check is the help page. And if there is a 
> worked example to look at its data:
>
>> data(pedigree, package="RFGLS")
>> str(pedigree)
> 'data.frame':	4050 obs. of  5 variables:
> $ FAMID: int  10 10 10 10 20 20 20 20 30 30 ...
> $ ID   : int  11 12 13 14 21 22 23 24 31 32 ...
> $ PID  : int  14 14 0 0 24 24 0 0 34 34 ...
> $ MID  : int  13 13 0 0 23 23 0 0 33 33 ...
> $ SEX  : num  1 1 2 1 2 2 2 1 2 2 …

Thanks for your efforts, but you are mistaken.  Before I wrote anything 
here I had already worked through this with Rob Kirkpatrick, we had run 
the data() examples, confirmed the error there, and more.

I was a coauthor of the Human Heredity paper that introduced this software 
and it was based on other work I had done.  I'm pretty sure I'm the #1 
user of this package.

FTYPE != FAMID

Everything I said was correct.

Mike


More information about the R-help mailing list