[R] Automating citations in Sweave

Charles C. Berry cberry at tajo.ucsd.edu
Thu Oct 23 18:53:32 CEST 2008


On Thu, 23 Oct 2008, ONKELINX, Thierry wrote:

> Dear all,
>
> Is there an elegant way to add citations of packages when using Sweave?
> Ideally I'd like a function which creates a Bibtex-file with the
> packagenames as keys. The idea is to use \cite{packagename} or \cite{R}
> in LaTeX.
>
> I know you can get the Bibtex entry with
> toBibtex(citation("packagename")). But after updating R or a package one
> needs to update the bib-file too. When trying to automate this I came up
> with the code below. It generates a Bibtex-file, but without keys for
> each item. So I have to add those manually. Another problem is that I
> get multiple entrys for R it self.
>
> Suggestions are welcome.
>

Thierry,

How 'bout:

cite.by.name <- function(x){
     res <- toBibtex(citation(x))
     if (is.list(res)) res <- res[[1]]
     res[1] <- sub("{",paste("{",x,sep=''),res[1],fixed=TRUE)
     res
}

> cite.by.name("MASS")
@Book{MASS,
   title = {Modern Applied Statistics with S},
   author = {W. N. Venables and B. D. Ripley},
   publisher = {Springer},
   edition = {Fourth},
   address = {New York},
   year = {2002},
   note = {ISBN 0-387-95457-0},
   url = {http://www.stats.ox.ac.uk/pub/MASS4},
}
>

Then

 	sapply( .packages(TRUE), function(x) try( cite.by.name(x) ) )

should be close to what you want.

HTH,

Chuck


> Thierry
>
> sink("Rpackages.bib")
>    tmp <- sapply(.packages(), function(x){
>        entry <- toBibtex(citation(x))
>        if(class(entry) == "Bibtex"){
>            print(entry)
>        } else {
>            tmp <- sapply(entry, print)
>        }
>    })
> sink()
>

[snip]

Charles C. Berry                            (858) 534-2098
                                             Dept of Family/Preventive Medicine
E mailto:cberry at tajo.ucsd.edu	            UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901



More information about the R-help mailing list