From smyth at wehi.EDU.AU  Tue Sep 29 03:17:36 2009
From: smyth at wehi.EDU.AU (Gordon K Smyth)
Date: Tue, 29 Sep 2009 11:17:36 +1000 (AUS Eastern Standard Time)
Subject: [Rd] documentation cross references under R 2.10.0dev for
	Windows
In-Reply-To: <Pine.WNT.4.64.0909281623470.5952@PC602.alpha.wehi.edu.au>
References: <59d7961d0909231908q4ba58b99gdee28c1c49ffd6bc@mail.gmail.com>
	<4ABADF79.9050106@stats.uwo.ca>
	<Pine.WNT.4.64.0909281623470.5952@PC602.alpha.wehi.edu.au>
Message-ID: <Pine.WNT.4.64.0909291108540.4488@PC602.alpha.wehi.edu.au>

With one expection, all warnings go away when I download the relevant 
Bioconductor packages as source code and re-build them (rcmd INSTALL 
--build) on my own machine.

The warnings re-appear if I install the Bioconductor packages in the 
normal way using biocLite("Biobase") etc.  I will follow this up with the 
Bioconductor people.

The one exception is the self-reference to limma:00Index.  This marked as 
a missing link, under Windows only, although it works fine.

Gordon

On Mon, 28 Sep 2009, Gordon K Smyth wrote:

> Rcmd check under R 2.10.0dev for Windows seems to be issuing a number of 
> spurious warning messages about Rd cross-references.
>
> The following warning messages appear when checking the latest (non-public) 
> version of the Bioconductor package limma.  They appear only under Windows, 
> not Unix or Mac.  All the flagged links appear to be ok, in that they 
> specific a genuine html file, and should therefore not be marked as suspect 
> or missing.
>
> Regards
> Gordon
>
> * using R version 2.10.0 Under development (unstable) (2009-09-27 r49846)
> * using session charset: ISO8859-1
> * checking Rd cross-references ... WARNING
> Missing link(s) in documentation object './man/01Introduction.Rd':
>  '[limma:00Index]{LIMMA contents page}'
>
> Suspect link(s) in documentation object './man/asmalist.Rd':
>  '[marray:marrayNorm-class]{marrayNorm}'
>
> Suspect link(s) in documentation object './man/asmatrix.Rd':
>  '[Biobase]{exprs}'
>
> Suspect link(s) in documentation object './man/dupcor.Rd':
>  '[statmod]{mixedModel2Fit}'
>
> Suspect link(s) in documentation object './man/EList.Rd':
>  '[Biobase]{ExpressionSet-class}'
>
> Suspect link(s) in documentation object './man/imageplot.Rd':
>  '[marray]{maImage}'
>
> Suspect link(s) in documentation object './man/intraspotCorrelation.Rd':
>  '[statmod]{remlscore}'
>
> Suspect link(s) in documentation object './man/limmaUsersGuide.Rd':
>  '[Biobase]{openPDF}' '[Biobase]{openVignette}' '[base]{Sys.putenv}'
>
> Suspect link(s) in documentation object './man/malist.Rd':
>  '[marray:marrayNorm-class]{marrayNorm}'
>
> Suspect link(s) in documentation object './man/normalizebetweenarrays.Rd':
>  '[marray:maNormScale]{maNormScale}' '[affy:normalize]{normalize}'
>
> Suspect link(s) in documentation object './man/normalizeWithinArrays.Rd':
>  '[marray:maNorm]{maNorm}'
>
> Suspect link(s) in documentation object './man/normexpfit.Rd':
>  '[affy:bg.adjust]{bg.parameters}'
>
> Suspect link(s) in documentation object './man/readgal.Rd':
>  '[marray:read.Galfile]{read.Galfile}'
>
> Suspect link(s) in documentation object './man/rglist.Rd':
>  '[marray:marrayRaw-class]{marrayRaw}'
>
>
>
> On Wed, 23 Sep 2009, Duncan Murdoch wrote:
>
>> On 23/09/2009 10:08 PM, Henrik Bengtsson wrote:
>>> Hi,
>>> 
>>> in 'Writing R Extensions" of R v2.10.0, under Section
>>> 'Cross-references' (2009-09-07) it says:
>>> 
>>> 1. "The markup \link{foo} (usually in the combination
>>> \code{\link{foo}}) produces a hyperlink to the help for foo. Here foo
>>> is a topic, that is the argument of \alias markup in another Rd file
>>> (possibly in another package)."
>>> 
>>> 2. "You can specify a link to a different topic than its name by
>>> \link[=dest]{name} which links to topic dest with name name. This can
>>> be used to refer to the documentation for S3/4 classes, for example
>>> \code{"\link[=abc-class]{abc}"} would be a way to refer to the
>>> documentation of an S4 class "abc" defined in your package, and
>>> \code{"\link[=terms.object]{terms}"} to the S3 "terms" class (in
>>> package stats). To make these easy to read, \code{"\linkS4class{abc}"}
>>> expands to the form given above."
>>> 
>>> 3. "There are two other forms of optional argument specified as
>>> \link[pkg]{foo} and \link[pkg:bar]{foo} to link to the package pkg, to
>>> files foo.html and bar.html respectively. These are rarely needed,
>>> perhaps to refer to not-yet-installed packages (but there the HTML
>>> help system will resolve the link at run time) or in the normally
>>> undesirable event that more than one package offers help on a topic20
>>> (in which case the present package has precedence so this is only
>>> needed to refer to other packages). They are only in used in HTML help
>>> (and ignored for hyperlinks in LaTeX conversions of help pages), and
>>> link to the file rather than the topic (since there is no way to know
>>> which topics are in which files in an uninstalled package). The *only*
>>> reason to use these forms for base and recommended packages is to
>>> force a reference to a package that might be further down the search
>>> path. Because they have been frequently misused, as from R 2.10.0 the
>>> HTML help system will look for topic foo in package pkg if it does not
>>> find file foo.html."
>>> 
>>> 
>>> Trying to summarize the above, do we have the following markups/rules?
>>> 
>>> A. \link{<topic>} - where <topic> must occur as an \alias{<topic>},
>>> but not necessarily as an \name{<topic>}.  The link will be display as
>>> the string <topic>.
>>> B. \link[=<topic>]{<name>} - where <topic> must occur as an
>>> \alias{<topic>} with a \name{<name>}.  The link will be display as the
>>> string <name>.
>>> C. \link{<packageName>]{<name>} - where <name> must be a \name{<name>}
>>> in a package named <packageName>.  The link will be display as the
>>> string <name>.
>>> D. \link{<packageName>:<name>]{<label>} - where <name> must be a
>>> \name{<name>} in a package named <packageName>.  The link will be
>>> display as the string <label>.  There are no restrictions on <label>.
>>> E. \linkS4class{<className>} expands to
>>> \link[=<className>-class]{<className>}.  From (B) it then follows that
>>> there must be an \alias{<className>-class} and a \name{<className>}.
>>> 
>>> 
>>> Q1. Is that correct?  To me it look a bit inconsistent.
>> 
>> No, \name{} is irrelevant for links.  It's the filename that matters in the 
>> 3rd form.
>> 
>>> 
>>> Q2. Are there more?
>>> 
>>> Q3. Will there be more?
>>> 
>>> Q4. What about
>>> 
>>> \link[=<topic>]{<label>}
>>> \link{<packageName>:<topic>]{<label>}
>>> 
>>> where <label> can be (almost) any string?
>> 
>> The first is what the 2nd form refers to.  "Name" there is what is 
>> displayed in the file making the link.
>> 
>> The second is new, as of 2.10.0, and is the fallback if a filename matching 
>> <topic> is not found.
>>> 
>>> Q4. Are (A) and (B) only supposed to be used for linking within a
>>> package, or can it be used to link to "wherever" <topic> exist?
>> 
>> They should work anywhere.  The difficulty arises if you link to something 
>> that a user doesn't have installed, or if the link is ambiguous.
>> 
>>> Q5. It sounds that (C) and (D) should be avoided.  Is that correct?
>> 
>> I think good practice is to make sure that the base of the filename (less 
>> .Rd) is also an alias in the file, and also the \name{} of the file.  The 
>> system would probably be less confusing if this were forced, but there are 
>> lots of files out there where it's not true.
>> 
>> You want the filename to be an alias because links sometimes go to aliases 
>> and sometimes to filenames; you want the name to match because that's what 
>> is displayed at the top of the page, so people might remember "just go to 
>> the Foo man page".
>> 
>>> Q6. What if <topic> exist in two packages 'pkgA' and 'pkgB' and I want
>>> to specify that I mean topic <topic> of package 'pkgA', cf namespaces
>>> and pkgA::foo()?
>> 
>> If you follow the good practice above, then use \link[pkgA]{topic}.  If you 
>> don't follow that practice, you may be out of luck, because R will look for 
>> the filename topic.Rd in pkgA, not \alias{topic}.  However, as of 2.10.0, 
>> it will fall back to the latter.
>> 
>>> Q7. I the 1st paragraph above it says "(possibly in another package)"
>>> and in the 3rd paragraph above it is mentioned at "The only reason to
>>> use these forms [...] is to force a reference to a package that might
>>> be further down the search path" - is that the answer to Q4?  Will
>>> \link{<topic>} be *dynamically* linked to whatever comes first on the
>>> search() path - to reflect the running environment rather than the
>>> intention of the document?
>> 
>> In 2.10.0, I believe this will be the case (but I'd have to check the code 
>> to be sure).  I'd recommend being explicit if you are worried about this 
>> possibility.
>> 
>> 
>>> Reading between the lines, the development of Rd looks exiting.
>>> Instead of 2nd guessing where we are heading, could someone in charge
>>> please give some thoughts on what the plans are and an estimate on how
>>> long it will take before we are there - what R version?
>> 
>> I don't think there's really someone "in charge", but I've been closely 
>> involved with this, so I'll give some thoughts.
>> 
>> Generally speaking, we have releases on a regular schedule, we don't hold 
>> them up for particular features.  So I don't think it would be possible to 
>> figure out when development on Rd files will be done.  It depends on when 
>> people have the time to do what they think needs doing, and to a large 
>> extent, that depends on how things get used.
>> 
>> Some things that are not there now, but which might be there in the future 
>> (i.e. later than 2.10.0):
>> 
>> - Better support for the \Sexpr macros (which let the content of man pages 
>> depend on R code, executed just before rendering).  Right now there's no 
>> special support for that R code; it would make sense to define some 
>> functions to make writing such stuff easier.  (This is something that could 
>> be done in a contributed package, it needn't be in base R.)
>> 
>> - Improved prompt() and package.skeleton() functions to take advantage of 
>> the above.
>> 
>> - Graphs in man pages.
>> 
>> - Ways to link from man pages to vignettes.  The reverse would be nice, but 
>> it's not possible with the current design, so that would be far off.
>> 
>> - Some general rationalization of the whole help system.
>> 
>> Duncan Murdoch
>> 
>>> 
>>> MISC:
>>> I understand that \link[=<className>-class]{<className>} is part of
>>> standard Rd conventions, but to the best of my knowledge
>>> \link[=<className>.class]{<className>} is not, correct?  I would like
>>> to suggest to write a separate paragraph for S4 classes without
>>> mentioning S3 classes.  The following also adds to the confusion -
>>> there exists one Rd page with \name{terms} and one with
>>> \name{terms.object}, so it is not really clear what
>>> \link[=terms.object]{terms} is strictly supposed to do - is it of form
>>> \link[=<topic>]{<name>} or \link[=<topic>]{<label>}.  Maybe it is
>>> helpful to clarify what the static/dynamic link will be and what will
>>> be display.
>>> 
>>> Thanks
>>> 
>>> Henrik
>>> 
>>> PS. This is related to today's (Sept 23, 2009) BioConductor posts by
>>> Gordon Smyth - "[Bioc-devel] BioC 2.5: "suspect" interpackage links";
>>> https://stat.ethz.ch/pipermail/bioc-devel/2009-September/001975.html
>>> 
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> 
>> 
>



[Rd] documentation cross references under R 2.10.0dev for Windows
Gordon K Smyth