<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
p.Courier, li.Courier, div.Courier
        {mso-style-name:Courier;
        mso-style-link:"Courier Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Courier New";}
span.CourierChar
        {mso-style-name:"Courier Char";
        mso-style-link:Courier;
        font-family:"Courier New";}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle23
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hello again,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have run across an interesting issue using the most recent inlinedocs (2013.9.3) on one of my old libraries. The symptom is that running R CMD check fails with:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">* checking examples ... ERROR<o:p></o:p></p>
<p class="MsoNormal">Running examples in 'MinerHits-Ex.R' failed<o:p></o:p></p>
<p class="MsoNormal">The error most likely occurred in:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">> ### Name: HitInfo<o:p></o:p></p>
<p class="MsoNormal">> ### Title: HitInfo<o:p></o:p></p>
<p class="MsoNormal">> ### Aliases: HitInfo<o:p></o:p></p>
<p class="MsoNormal">><o:p> </o:p></p>
<p class="MsoNormal">> ### ** Examples<o:p></o:p></p>
<p class="MsoNormal">> library(MinerHits)<o:p></o:p></p>
<p class="MsoNormal">> TRUE<o:p></o:p></p>
<p class="MsoNormal">[1] TRUE<o:p></o:p></p>
<p class="MsoNormal">> if ( file.exists("../MinerHits_testdata/SBC") ){ # text data too big to package!<o:p></o:p></p>
<p class="MsoNormal">+ TRUE<o:p></o:p></p>
<p class="MsoNormal">+   sbc.tiny.test <- HitInfo("../MinerHits_testdata/SBC/PerformanceTester/%d/hits",<o:p></o:p></p>
<p class="MsoNormal">+ TRUE<o:p></o:p></p>
<p class="MsoNormal">+                        ## select a very small subset of the hits for testing<o:p></o:p></p>
<p class="MsoNormal">+ TRUE<o:p></o:p></p>
<p class="MsoNormal">Error: unexpected numeric constant in:<o:p></o:p></p>
<p class="MsoNormal">"                       ## select a very small subset of the hits for testing<o:p></o:p></p>
<p class="MsoNormal">TRUE"<o:p></o:p></p>
<p class="MsoNormal">Execution halted<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The immediate cause of the problem is all those TRUE lines. Tracing the process I find that in applying parsers, I get to the following state after examples.in.attr parser:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">debug: docs <- combine(docs, L)<o:p></o:p></p>
<p class="MsoNormal">Browse[2]> L$HitInfo<o:p></o:p></p>
<p class="MsoNormal">$examples<o:p></o:p></p>
<p class="MsoNormal">[1] TRUE<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Browse[2]> docs$HitInfo$examples<o:p></o:p></p>
<p class="MsoNormal">[1] "library(MinerHits)"                                                                
<o:p></o:p></p>
<p class="MsoNormal"> [2] "if ( file.exists(\"../MinerHits_testdata/SBC\") ){ # text data too big to package!"
<o:p></o:p></p>
<p class="MsoNormal"> [3] "  sbc.tiny.test <- HitInfo(\"../MinerHits_testdata/SBC/PerformanceTester/%d/hits\","<o:p></o:p></p>
<p class="MsoNormal">[4] "                       ## select a very small subset of the hits for testing"      
<o:p></o:p></p>
<p class="MsoNormal"> [5] "                       term.ids=15:20,take.ids=(0:20),selector=HitThresh(2),"      
<o:p></o:p></p>
<p class="MsoNormal"> [6] "                       phrases=\"7-11\",dataset=\"SBC\")"                           <o:p></o:p></p>
<p class="MsoNormal"> [7] "  sbc.tiny.test"                                                                   
<o:p></o:p></p>
<p class="MsoNormal"> [8] "  summary(sbc.tiny.test)"                                                          
<o:p></o:p></p>
<p class="MsoNormal"> [9] "  ll(sbc.tiny.test)"                                                                <o:p></o:p></p>
<p class="MsoNormal">[10] "  ## normal use invokes R.oo save.Object"                                          
<o:p></o:p></p>
<p class="MsoNormal">[11] "  save(sbc.tiny.test,file=\"sbc.tiny.test.RData\")"                                
<o:p></o:p></p>
<p class="MsoNormal">[12] "  ## But this code is saving for distribution with package."                       
<o:p></o:p></p>
<p class="MsoNormal">[13] "  ## In order to be usable with data function, need to do normal save:"            
<o:p></o:p></p>
<p class="MsoNormal">[14] "  save(\"sbc.tiny.test\",file=\"sbc.tiny.test.RData\")"                            
<o:p></o:p></p>
<p class="MsoNormal">[15] "}"                                                                                  <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">and after the combine call this becomes:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Browse[2]> docs$HitInfo$examples<o:p></o:p></p>
<p class="MsoNormal">[1] "library(MinerHits)\nTRUE"                                                                
<o:p></o:p></p>
<p class="MsoNormal"> [2] "if ( file.exists(\"../MinerHits_testdata/SBC\") ){ # text data too big to package!\nTRUE"
<o:p></o:p></p>
<p class="MsoNormal"> [3] "  sbc.tiny.test <- HitInfo(\"../MinerHits_testdata/SBC/PerformanceTester/%d/hits\",\nTRUE"<o:p></o:p></p>
<p class="MsoNormal">[4] "                       ## select a very small subset of the hits for testing\nTRUE"      
<o:p></o:p></p>
<p class="MsoNormal"> [5] "                       term.ids=15:20,take.ids=(0:20),selector=HitThresh(2),\nTRUE"      
<o:p></o:p></p>
<p class="MsoNormal"> [6] "                       phrases=\"7-11\",dataset=\"SBC\")\nTRUE"                          
<o:p></o:p></p>
<p class="MsoNormal"> [7] "  sbc.tiny.test\nTRUE"                                                                    <o:p></o:p></p>
<p class="MsoNormal"> [8] "  summary(sbc.tiny.test)\nTRUE"                                                          
<o:p></o:p></p>
<p class="MsoNormal"> [9] "  ll(sbc.tiny.test)\nTRUE"                                                               
<o:p></o:p></p>
<p class="MsoNormal">[10] "  ## normal use invokes R.oo save.Object\nTRUE"                                          
<o:p></o:p></p>
<p class="MsoNormal">[11] "  save(sbc.tiny.test,file=\"sbc.tiny.test.RData\")\nTRUE"                                
<o:p></o:p></p>
<p class="MsoNormal">[12] "  ## But this code is saving for distribution with package.\nTRUE"                        <o:p></o:p></p>
<p class="MsoNormal">[13] "  ## In order to be usable with data function, need to do normal save:\nTRUE"            
<o:p></o:p></p>
<p class="MsoNormal">[14] "  save(\"sbc.tiny.test\",file=\"sbc.tiny.test.RData\")\nTRUE"                            
<o:p></o:p></p>
<p class="MsoNormal">[15] "}\nTRUE"                                                                                  <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">And all those TRUE lines subsequently break R CMD check. I note that the definition of combine.character is:<o:p></o:p></p>
<p class="MsoNormal">function (x, y) <o:p></o:p></p>
<p class="MsoNormal">paste(x, y, sep = "\n")<o:p></o:p></p>
<p class="MsoNormal"><environment: namespace:inlinedocs><o:p></o:p></p>
<p class="MsoNormal">which is where all the \nTRUE comes from.  Is that paste really what you intended combine.character to do in the case where there are examples both in the tests subdirectory and in attributes? I suspect that it would work better as a simple
 concatenation of the two character vectors.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The reason for the TRUE being found by examples.in.attr is that R.oo (which I am using here), gives an “export” attribute, which is discovered by the default behaviour of attr(o, "ex") in inlinedocs. We cannot change that usage without
 breaking behaviour, but we could add exact=TRUE to the attr call?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Keith<o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:7.5pt;font-family:"Arial","sans-serif";color:#1F497D">Keith Ponting<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:7.5pt;font-family:"Arial","sans-serif";color:#1F497D">Avaya Speech Analytics, Malvern WR14 3SZ  UK<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:7.5pt;font-family:"Arial","sans-serif";color:#1F497D">Any opinions are those of the author not the company.<o:p></o:p></span></p>
</div>
</body>
</html>