Search code examples
rattributesbibtexcitations

Modifying a `citation` object in `R`


I am trying to modify a citation object in R as follows

cit <- citation("ggplot2")

cit$textVersion
#[1] "H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2009."

cit$textVersion <- "Hadley Wickham and Winston Chang (2016). ggplot2: Create Elegant Data Visualisations Using
  the Grammar of Graphics. R package version 2.2.1."

But there is no change.

cit$textVersion
#[1] "H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2009."

If we examine the structure of cit, now there are two textVersion attributes. How to modify the original textVersion alone?

str(cit)
List of 1
 $ :Class 'bibentry'  hidden list of 1
  ..$ :List of 6
  .. ..$ author   :Class 'person'  hidden list of 1
  .. .. ..$ :List of 5
  .. .. .. ..$ given  : chr "Hadley"
  .. .. .. ..$ family : chr "Wickham"
  .. .. .. ..$ role   : NULL
  .. .. .. ..$ email  : NULL
  .. .. .. ..$ comment: NULL
  .. ..$ title    : chr "ggplot2: Elegant Graphics for Data Analysis"
  .. ..$ publisher: chr "Springer-Verlag New York"
  .. ..$ year     : chr "2009"
  .. ..$ isbn     : chr "978-0-387-98140-6"
  .. ..$ url      : chr "http://ggplot2.org"
  .. ..- attr(*, "bibtype")= chr "Book"
  .. ..- attr(*, "textVersion")= chr "H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2009."
  .. ..- attr(*, "textversion")= chr "Hadley Wickham and Winston Chang (2016). ggplot2: Create Elegant Data Visualisations Using\n  the Grammar of Gr"| __truncated__
 - attr(*, "mheader")= chr "To cite ggplot2 in publications, please use:"
 - attr(*, "class")= chr "bibentry"

Solution

  • A citation object is not made to be modified. The subset operators ($, [, but also $<-) are specific and don't allow easy modifications. This is for a reason: citation information is written in a specific file of a package and are not thought to be modified. I don't know why you are trying it, but if you really need to, here is a little hack.

    #store the class of the object, so can be reassigned later
    oc<-class(cit)
    #unclass the object to be free to modify
    tmp<-unclass(cit)
    #assign the new "textVersion"
    attr(tmp[[1]],"textVersion")<-"Hadley Wickham and Winston Chang (2016). ggplot2: Create Elegant Data Visualisations Using the Grammar of Graphics. R package version 2.2.1."
    #assign the class back
    class(tmp)<-oc
    tmp
    #To cite ggplot2 in publications, please use:
    #
    #  Hadley Wickham and Winston Chang (2016). ggplot2: Create Elegant Data
    #  Visualisations Using the Grammar of Graphics. R package version
    #  2.2.1.
    #
    #A BibTeX entry for LaTeX users is
    #
    #  @Book{,
    #    author = {Hadley Wickham},
    #    title = {ggplot2: Elegant Graphics for Data Analysis},
    #    publisher = {Springer-Verlag New York},
    #    year = {2009},
    #    isbn = {978-0-387-98140-6},
    #    url = {http://ggplot2.org},
    #  }