Re: [Rd] directing print.packageInfo to a file

From: Gabor Grothendieck <ggrothendieck_at_myway.com>
Date: Mon 02 Aug 2004 - 17:10:39 EST

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@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@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)
>> }
>



R-devel@stat.math.ethz.ch mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-devel Received on Mon Aug 02 17:13:12 2004

This archive was generated by hypermail 2.1.8 : Fri 18 Mar 2005 - 08:59:16 EST