Что означает «скрытый список» в выводе `str ()`? - PullRequest
10 голосов
/ 19 марта 2012

Пытаясь ответить на этот вопрос Я сталкивался с этим в выводе str()

## R reference
rref <- bibentry(bibtype = "Manual",
        title = "R: A Language and Environment for Statistical Computing",
        author = person("R Development Core Team"),
        organization = "R Foundation for Statistical Computing",
        address = "Vienna, Austria",
        year = 2010,
        isbn = "3-900051-07-0",
        url = "http://www.R-project.org/")

> str(rref)
Class 'bibentry'  hidden list of 1
 $ :List of 7
  ..$ title       : chr "R: A Language and Environment for Statistical Computing"
  ..$ author      :Class 'person'  hidden list of 1
  .. ..$ :List of 5
  .. .. ..$ given  : chr "R Development Core Team"
  .. .. ..$ family : NULL
  .. .. ..$ role   : NULL
  .. .. ..$ email  : NULL
  .. .. ..$ comment: NULL
  ..$ organization: chr "R Foundation for Statistical Computing"
  ..$ address     : chr "Vienna, Austria"
  ..$ year        : chr "2010"
  ..$ isbn        : chr "3-900051-07-0"
  ..$ url         : chr "http://www.R-project.org/"
  ..- attr(*, "bibtype")= chr "Manual"

В частности, я озадачен этим битом:

> str(rref)
Class 'bibentry'  hidden list of 1
 $ :List of 7

Что означает бит "hidden list"?Что это за объект?Это просто какой-то форматированный вывод str(), когда в объекте есть только один компонент, который сам является списком?Если да, то как можно заставить str() показать полную структуру?

1 Ответ

10 голосов
/ 19 марта 2012

Это похоже на артефакт str. Моя интерпретация заключается в том, что слова hidden list печатаются на выходе str, если объект не является pairlist.

Поскольку ваш объект относится к классу bibtex, и для bibtex нет метода str, метод utils:::str.default используется для описания структуры.

Сгущенный экстракт из str.default:

...
if (is.list(object)) {
    i.pl <- is.pairlist(object)
...
cat(if (i.pl) 
  "Dotted pair list"
   else if (irregCl) 
     paste(pClass(cl), "hidden list")
     else "List", " of ", le, "\n", sep = "")
...
}

Ключевой бит, который определяет irregCl:

....
else {
     if (irregCl <- has.class && identical(object[[1L]], 
         object)) {
....

и это объясняет бит скрытого списка - он скрывает внешний список, если у объекта есть класс и object и object[[1]] идентичны. Как показано в Answer , на который вы ссылались, метод [[ возвращает идентичный объект, если список содержит один объект "bibentry".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...