2012-03-19 8 views
9

Nel tentativo di rispondere this Question mi sono imbattuto in questo nell'output del str()Che cosa significa "lista nascosta" nell'output di `str()` significa?

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

In particolare, io sono perplesso da questo bit:

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

Che cosa significa il "hidden list" bit si riferiscono a ? Che tipo di oggetto è questo? Si tratta solo di un output di formattazione da str() quando c'è un solo componente nell'oggetto che è esso stesso un elenco? In tal caso, come è possibile forzare lo str() a mostrare l'intera struttura?

risposta

8

Questo sembra un artefatto di str. La mia interpretazione è che le parole hidden list vengono stampate nell'output di str se l'obect non è un pairlist.

Dal momento che l'oggetto è di classe bibtex, e non esiste alcun metodo per strbibtex, il metodo utils:::str.default è usato per descrivere la struttura.

estratto condensato dal 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 = "") 
... 
} 

Il bit chiave che definisce irregCl è:

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

e che spiegano il bit lista nascosta - nasconde la lista esterna se l'oggetto ha una classe e object e object[[1]] sono identici. Come hai mostrato nel documento Answer a cui ti sei collegato, il metodo [[ restituisce un oggetto identico se l'elenco contiene un singolo oggetto "bibentry".

+1

brillante ...... – BrodieG