From dtenenba at fhcrc.org  Sat Jan 25 23:23:08 2014
From: dtenenba at fhcrc.org (Dan Tenenbaum)
Date: Sat, 25 Jan 2014 14:23:08 -0800 (PST)
Subject: [Rd] interpreting the output of getParseData()
In-Reply-To: <1398825612.1355024.1390686219229.JavaMail.root@fhcrc.org>
Message-ID: <858439772.1355504.1390688588566.JavaMail.root@fhcrc.org>

Hi,

I'm trying to make sense of the output of getParseData(). The "parent" column is supposed to refer to the "id" of the parent of the given item, but there are numbers in the parent column that do not exist in the id column. Example:

> p <- parse(text="f<-function(){if(TRUE)1 else 2}")
> df <- getParseData(p)
> df
   line1 col1 line2 col2 id parent       token terminal     text
29     1    1     1   31 29     30        expr    FALSE         
1      1    1     1    1  1      3      SYMBOL     TRUE        f
3      1    1     1    1  3     29        expr    FALSE         
2      1    2     1    3  2     29 LEFT_ASSIGN     TRUE       <-
28     1    4     1   31 28     29        expr    FALSE         
4      1    4     1   11  4     28    FUNCTION     TRUE function
5      1   12     1   12  5     28         '('     TRUE        (
6      1   13     1   13  6     28         ')'     TRUE        )
25     1   14     1   31 25     27        expr    FALSE         
7      1   14     1   14  7     25         '{'     TRUE        {
22     1   15     1   30 22     23        expr    FALSE         
8      1   15     1   16  8     22          IF     TRUE       if
9      1   17     1   17  9     13         '('     TRUE        (
10     1   18     1   21 10     11   NUM_CONST     TRUE     TRUE
11     1   18     1   21 11     13        expr    FALSE         
12     1   22     1   22 12     13         ')'     TRUE        )
14     1   23     1   23 14     15   NUM_CONST     TRUE        1
15     1   23     1   23 15     17        expr    FALSE         
16     1   25     1   28 16     22        ELSE     TRUE     else
18     1   30     1   30 18     19   NUM_CONST     TRUE        2
19     1   30     1   30 19     21        expr    FALSE         
20     1   31     1   31 20     25         '}'     TRUE        }

The following numbers occur in the parent column but not the id column:
[1] 30 27 23 13 17 21

What I'm trying to do is determine the length (in lines) of every function in a source file using 
the getParseData() information. I can see that the opening and closing curly braces of my test function have the same parent (25), but 25 has the parent 27, which does not occur in the id column. 
I realize that my function is all on one line, and not all functions have opening and closing curly braces, but I'd still like to understand what's going on here....

What does it mean when an item's parent does not exist in the id column? 

Thanks,
Dan

> sessionInfo()
R Under development (unstable) (2013-10-18 r64076)
Platform: x86_64-apple-darwin10.8.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base



[Rd] interpreting the output of getParseData()
Dan Tenenbaum