[Rd] directing print.packageInfo to a file

Gabor Grothendieck ggrothendieck at myway.com
Mon Aug 2 09:10:39 CEST 2004



I already suggested using the pager as a workaround
in the original thread although your pager workaround
has the advantage of being 100% in R while mine used
a batch file which defined a new pager.

Note that R already supports

   options(pager = "console")

but if you do this then it seems that capture.output
still won't capture it.  Thus one alternative solution
would be to get capture.output to work with 
pager = "console" and modify print.packageInfo to
take a pager= argument which it would pass down to file.show.
(file.show already has a pager argument.)

Then one could write:

  capture.output( print.packageInfo(help(package = chron), 
            pager = "console"), file = "myfile.txt")

That gets it down to one line although it still seems
unnecessarily indirect when one could just write:

  print.packageInfo(help(package = chron), file = "myfile.txt")

if print.packageInfo just had a file= argument.
Furthermore, print.packageInfo ALREADY creates the file as a 
temporary file to hand over to file.show so its not much of
a stretch to give the user access to what it is already 
creating anyway.

From:   	Kurt Hornik <Kurt.Hornik at wu-wien.ac.at>
>>>>> Gabor Grothendieck writes:

>
> print.packageInfo does not print to the console, it uses file.show.
> For example, on R 1.9.1 patched on Windows XP:
>
>> require(chron)
> [1] TRUE
>> capture.output(print.packageInfo(help(package = chron)), file = "/abc.txt")
> NULL
>> length(readLines("/abc.txt"))
> [1] 0

But file.show() can be tuned by playing with options(pager).

In your case, something like

oop <- options(pager = function(file, ...) writeLines(readLines(file)))
capture.output(print.packageInfo(help(package = "stats")),
      file = "abc.txt")
options(oop)

gives

R> length(readLines("abc.txt"))
[1] 345

Hth
-k





>
>
> Kurt Hornik <Kurt.Hornik at wu-wien.ac.at> writes:
>
>>>>> Gabor Grothendieck writes:
>
>> There was a discussion on r-help of getting the output from
>> print.packageInfo into a file. Spencer and I have added a file=
>> argument to print.packageInfo for consideration in R. Had this
>> been available it would have simplified the answer to that
>> thread. If the file= argument is used then the packageInfo
>> information is sent to the file specified rather than displayed
>> using file.show .
>
> What is wrong with
>
> capture.output(print.packageInfo(x, ...), file = NULL)
>
> for what you want?
>
> -k
>
>> print.packageInfo <- function (x, ..., file = NULL)
>> {
>> if (!inherits(x, "packageInfo"))
>> stop("wrong class")
>> outFile <- if (is.null(file))
>> tempfile("RpackageInfo")
>> else
>> file
>> outConn <- file(outFile, open = "w")
>> vignetteMsg <- paste("Further information is available in the following ",
>> "vignettes in directory ", sQuote(file.path(x$path, "doc")),
>> ":", sep = "")
>> headers <- c("", "Description:\n\n", "Index:\n\n", paste(paste(strwrap
>> (vignetteMsg),
>> collapse = "\n"), "\n\n", sep = ""))
>> footers <- c("\n", "\n", "\n", "")
>> formatDocEntry <- function(entry) {
>> if (is.list(entry) || is.matrix(entry))
>> formatDL(entry, style = "list")
>> else entry
>> }
>> for (i in which(!sapply(x$info, is.null))) {
>> writeLines(headers[i], outConn, sep = "")
>> writeLines(formatDocEntry(x$info[[i]]), outConn)
>> writeLines(footers[i], outConn, sep = "")
>> }
>> close(outConn)
>> if (is.null(file))
>> file.show(outFile, delete.file = TRUE, title = paste
>> ("Documentation for package",
>> sQuote(x$name)))
>> invisible(x)
>> }
>



More information about the R-devel mailing list