修改 `R` 中的 `citation` 对象

Modifying a `citation` object in `R`

我正在尝试按如下方式修改 R 中的 citation 对象

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."

但是没有变化。

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

如果我们检查 cit 的结构,现在有两个 textVersion 属性。如何单独修改原来的textVersion

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"

一个citation对象不能被修改。子集运算符($[,还有 $<-)是特定的,不允许轻易修改。这是有原因的:citation信息写在一个包的特定文件中,不认为可以修改。 我不知道你为什么要尝试它,但如果你真的需要,这里有一个小技巧。

#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},
#  }