Achim and others:

Achim's solution could be directly usable if it also added a BibTeX key,
perhaps just the name of the package to the '@Manual{,' initial line of each. I wrapped the previous suggestions in a function, and played around with the components, but can't quite see how to account for the
failed citation calls.  Can anyone take the next step?

Rpackage.bibs <- function(file="Rpackages.bib") {
  pkgs <-installed.packages()[,1]
  bibs <- lapply(pkgs, function(x) try(toBibtex(citation(x))))
  n.installed <- length(bibs)

  ## omit failed citation calls
  #bibs <- bibs[-which(sapply(bibs, class) == "try-error")]
  bibs <- bibs[!(sapply(bibs, class) == "try-error")]
  n.converted <- length(bibs)
  ## unify to list of Bibtex
bibs <- lapply(bibs, function(x) if(inherits(x, "Bibtex")) list(x) else x)

  ## add bibtex keys to each entry
## -- change the first item of each bib entry from '@Manual{,' to '@Manual{pkgname,'

  ## list of unique entries
  bibs <- unique(do.call("c", bibs))
  ## write everything to a single .bib file
  writeLines(do.call("c", lapply(bibs, as.character)), file)
cat("Converted ", n.converted, " of ", n.installed, " package citations to BibTex\n",
      "Results written to file ", file, "\n")
}



Achim Zeileis wrote:
On Fri, 11 Dec 2009, Rainer M Krug wrote:

Hi

is there an easy and fast way, to generate a BibTeX file of all installed /
loaded packages and R?

I know about toBibtex(citation()) to extract the BibTeX for a single
package, but how can I generate a file containg citations for all installed
/ loaded packages?

I don't think that there is a way other than calling citation() for each of the installed.packages(). You could do something like this:

## try to get BibTeX for each of the installed packages
b <- lapply(installed.packages()[,1], function(x)
  try(toBibtex(citation(x))))
## omit failed citation calls
b <- b[-which(sapply(b, class) == "try-error")]
## unify to list of Bibtex
b <- lapply(b, function(x) if(inherits(x, "Bibtex")) list(x) else x)
## list of unique entries
b <- unique(do.call("c", b))
## write everything to a single .bib file
writeLines(do.call("c", lapply(b, as.character)), "Rpackages.bib")

hth,
Z

--
Michael Friendly     Email: friendly AT yorku DOT ca
Professor, Psychology Dept.
York University      Voice: 416 736-5115 x66249 Fax: 416 736-5814
4700 Keele Street    http://www.math.yorku.ca/SCS/friendly.html
Toronto, ONT  M3J 1P3 CANADA

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to