directing print.packageInfo to a file
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)
}