Gibt es zwei Orte, die paar-Listen zeigen sich Häufig im täglichen R. ist Man als formalen Funktion:
str(formals(var))
Andere ist als die Sprache der Objekte. Zum Beispiel:
quote(1+1)
produziert eine pairlist-Typ Sprache (LANGSXP intern). Der Hauptgrund, warum würden Sie sogar egal, über dessen bewusst ist, dass Operationen wie length(<language object>) oder language_object[[x]] kann langsam sein, weil, wie pairlist werden intern gespeichert (obwohl lange pairlist Sprache Objekte sind eher selten; Hinweis: die Ausdrücke sind nicht pairlists).
Beachten Sie, dass leere Elemente sind nur der Länge " null-Symbolen, und man kann sogar speichern Sie Sie in Listen, wenn Sie zu betrügen, ein bisschen (obwohl Sie wohl nicht tun):
list(x=substitute(x, alist(x=)))# hack alert
Alles, was gesagt, für die meisten Teil, die OP ist richtig, dass Sie nicht brauchen, um über sorgen pairlists zu viel, es sei denn, Sie schreiben von C-code für die Verwendung in R.
Internen Unterschiede zwischen Listen und pairlists
Pairlists und Liste unterscheiden sich hauptsächlich in Ihrer storage-Struktur. Pairlists gespeichert sind, als eine Kette von Knoten, wo jeder Knoten zeigt auf den Speicherort des den nächsten Knoten zusätzlich zu den Knoten, den Inhalt und die Knoten "name" (Siehe CAR/CDR-wiki-Artikel für Allgemeine Diskussion). Unter anderem bedeutet dies, können Sie nicht wissen, wie viele Elemente gibt es in einer pairlist, es sei denn, Sie wissen, was element ist das erste, und Sie dann durchqueren Sie die gesamte Liste.
Pairlists sind weitgehend in der R Interna, und existieren in normalen R verwenden, aber die meiste Zeit sind verkleidet durch die Druck-oder access-Methoden und/oder dazu gezwungen zu Listen, wenn auf Sie zugegriffen wird.
Listen auch eine Liste mit Adressen, aber im Gegensatz zu pairlists, alle Adressen sind gespeichert, die in einem zusammenhängenden Speicherbereich und die gesamte Länge erfasst wird. Dies vereinfacht den Zugriff auf jede beliebige Mitglied der Liste durch die Position, da kann man nur nachschlagen der Adresse in der Speicher-Tabelle. Mit einem pairlist, würden Sie haben zu springen von Knoten zu Knoten, bis Sie schließlich auf den gewünschten Knoten. Namen werden auch als Attribute abgelegt, die Liste der richtigen, anstatt an jeden Knoten eine pairlist.
Vorteile pairlists
Einer (meist kleinen) Vorteil pairlists ist, dass Sie hinzufügen können, um Ihnen mit minimalen Aufwand, da müssen Sie nur ändern, höchstens zwei Knoten (die Knoten vor dem neuen Knoten und dem neuen Knoten selbst), in der Erwägung, dass mit einer Liste, die Sie möglicherweise brauchen, um neu zu ordnen die gesamte Adresse-Tabelle mit einem Anstieg in der Größe (dies ist in der Regel nicht viel von einem Problem, da die Adresse-Tabelle ist in der Regel sehr klein im Vergleich zu der Größe der Daten der Tabelle Punkte zu). Es gibt auch viele algorithmen, die sich spezialisieren, in pairlist manipulation (z.B. Sortierung, Indizierung, usw.), aber diejenigen, die portiert werden können normale Listen als gut.
Weniger relevant für die Tag-zu-Tag verwenden, da Sie nur im Innenleben, es ist sehr einfach, die Liste zu ändernde Programmierung Perspektive zu verändern, was jede beliebige element Punkte zu.
Locker mit Bezug auf die oben, pairlists sind wahrscheinlich effizienter sein, wenn Sie stark verschachtelte Objekte. Listen können leicht replizieren diese Struktur, aber jede Liste und die verschachtelte Liste aufgebürdet wird, die zusätzlichen Speicher-Adressen-Tabelle. Dies ist wahrscheinlich der Grund, pairlists verwendet werden, für die Sprache, die Objekte, die sehr wahrscheinlich eine hohe Verschachtelung /element ratio.
Weitere details siehe R Interna (siehe LISTSXP und VECSXP, pairlists und Listen bzw. an der verlinkten Stelle).
edit: interessant ein experiment zu vergleichen, den Speicherbedarf einer Liste, um eine pairlist zeigt die pairlist werden größer, so dass die storage-Effizienz-argument falsch sein können (nicht sicher, ob object.size vertraut werden kann hier):
> plist_to_list <-function(x){+if(is.call(x)) x <- as.list(x)+if(length(x)>1)for(i in2:length(x)) x[[i]]<- Recall(x[[i]])+ x
+}> add_quote <-function(x, y) call("+", x, y)> x <- Reduce(add_quote, lapply(letters, as.name))> object.size(x)7056 bytes
> y <- plist_to_list(x)> object.size(y)4656 bytes
Alle Elemente, die indiziert werden können, die durch Ihre position in der Liste. Benannte Elemente kann zusätzlich aufgerufen werden, indem name:
> my.list[[2]][1]"B"> my.list$second
[1]"B"
Auch, jedes element in einer Liste ist ein Vektor, auch wenn es nur ein Vektor mit einem einzelnen element. Weitere Informationen zu Listen finden Sie unter Wie man Richtig Verwenden Sie Listen im R?.
pairlists enthalten kann leer benannte Elemente
Eine pairlist ist im Grunde das gleiche wie eine Liste, außer dass eine pairlist enthalten können ein leeres element, sondern eine Liste nicht. Auch eine pairlist ist konstruiert mit der alist Funktion.
> list('A',second=,'C')
Error in as.pairlist(list(...)): argument is missing, with no default
> alist('A',second=,'C')[[1]][1]"A"$second
[[3]][1]"C"
Aber, wie bereits erwähnt, Sie sind veraltet. Sie haben keinen nutzen oder Vorteil gegenüber Listen, die ich kenne.
Hier ist etwas merkwürdiges: obwohl ein standard-Liste kann nicht halten ein leeres element ist, kann es halten bquote() als ein element. Für das schreiben von Funktionen für arrays mit unbekannter Anzahl von Dimensionen, mit do.call("[", c(list(arr), ...)) ist sehr hilfreich, dort können Sie die Liste der Argumente, die zählen bquote(). Ich nehme an bquote() im Grunde können list alles zu tun, dass alist können. Keine Ahnung warum eine pairlist ist aufgerufen, eine pairlist?
Pairlists in Tag zu Tag R
Gibt es zwei Orte, die paar-Listen zeigen sich Häufig im täglichen R. ist Man als formalen Funktion:
Andere ist als die Sprache der Objekte. Zum Beispiel:
produziert eine pairlist-Typ Sprache (LANGSXP intern). Der Hauptgrund, warum würden Sie sogar egal, über dessen bewusst ist, dass Operationen wie
length(<language object>)
oderlanguage_object[[x]]
kann langsam sein, weil, wie pairlist werden intern gespeichert (obwohl lange pairlist Sprache Objekte sind eher selten; Hinweis: die Ausdrücke sind nicht pairlists).Beachten Sie, dass leere Elemente sind nur der Länge " null-Symbolen, und man kann sogar speichern Sie Sie in Listen, wenn Sie zu betrügen, ein bisschen (obwohl Sie wohl nicht tun):
Alles, was gesagt, für die meisten Teil, die OP ist richtig, dass Sie nicht brauchen, um über sorgen pairlists zu viel, es sei denn, Sie schreiben von C-code für die Verwendung in R.
Internen Unterschiede zwischen Listen und pairlists
Pairlists und Liste unterscheiden sich hauptsächlich in Ihrer storage-Struktur. Pairlists gespeichert sind, als eine Kette von Knoten, wo jeder Knoten zeigt auf den Speicherort des den nächsten Knoten zusätzlich zu den Knoten, den Inhalt und die Knoten "name" (Siehe CAR/CDR-wiki-Artikel für Allgemeine Diskussion). Unter anderem bedeutet dies, können Sie nicht wissen, wie viele Elemente gibt es in einer pairlist, es sei denn, Sie wissen, was element ist das erste, und Sie dann durchqueren Sie die gesamte Liste.
Pairlists sind weitgehend in der R Interna, und existieren in normalen R verwenden, aber die meiste Zeit sind verkleidet durch die Druck-oder access-Methoden und/oder dazu gezwungen zu Listen, wenn auf Sie zugegriffen wird.
Listen auch eine Liste mit Adressen, aber im Gegensatz zu pairlists, alle Adressen sind gespeichert, die in einem zusammenhängenden Speicherbereich und die gesamte Länge erfasst wird. Dies vereinfacht den Zugriff auf jede beliebige Mitglied der Liste durch die Position, da kann man nur nachschlagen der Adresse in der Speicher-Tabelle. Mit einem pairlist, würden Sie haben zu springen von Knoten zu Knoten, bis Sie schließlich auf den gewünschten Knoten. Namen werden auch als Attribute abgelegt, die Liste der richtigen, anstatt an jeden Knoten eine pairlist.
Vorteile pairlists
Einer (meist kleinen) Vorteil pairlists ist, dass Sie hinzufügen können, um Ihnen mit minimalen Aufwand, da müssen Sie nur ändern, höchstens zwei Knoten (die Knoten vor dem neuen Knoten und dem neuen Knoten selbst), in der Erwägung, dass mit einer Liste, die Sie möglicherweise brauchen, um neu zu ordnen die gesamte Adresse-Tabelle mit einem Anstieg in der Größe (dies ist in der Regel nicht viel von einem Problem, da die Adresse-Tabelle ist in der Regel sehr klein im Vergleich zu der Größe der Daten der Tabelle Punkte zu). Es gibt auch viele algorithmen, die sich spezialisieren, in pairlist manipulation (z.B. Sortierung, Indizierung, usw.), aber diejenigen, die portiert werden können normale Listen als gut.
Weniger relevant für die Tag-zu-Tag verwenden, da Sie nur im Innenleben, es ist sehr einfach, die Liste zu ändernde Programmierung Perspektive zu verändern, was jede beliebige element Punkte zu.
Locker mit Bezug auf die oben, pairlists sind wahrscheinlich effizienter sein, wenn Sie stark verschachtelte Objekte. Listen können leicht replizieren diese Struktur, aber jede Liste und die verschachtelte Liste aufgebürdet wird, die zusätzlichen Speicher-Adressen-Tabelle. Dies ist wahrscheinlich der Grund, pairlists verwendet werden, für die Sprache, die Objekte, die sehr wahrscheinlich eine hohe Verschachtelung /element ratio.
Weitere details siehe R Interna (siehe LISTSXP und VECSXP, pairlists und Listen bzw. an der verlinkten Stelle).
edit: interessant ein experiment zu vergleichen, den Speicherbedarf einer Liste, um eine pairlist zeigt die pairlist werden größer, so dass die storage-Effizienz-argument falsch sein können (nicht sicher, ob
object.size
vertraut werden kann hier):Zunächst pairlists sind veraltet
pairlists veraltet sind für den normalen Gebrauch. Sie werden nicht immer brauchen, um Sie kümmern, es sei denn, Sie arbeiten an der R-Interna.
Listen enthalten kann, die benannten Elemente
Jedes element in eine Liste, in der R einen Namen haben. Sie können auf jedes element in einer Liste entweder nach Namen oder den numerischen index.
Hier ist ein Beispiel einer Liste, in der das zweite element mit dem Namen 'zweite':
Alle Elemente, die indiziert werden können, die durch Ihre position in der Liste. Benannte Elemente kann zusätzlich aufgerufen werden, indem name:
Auch, jedes element in einer Liste ist ein Vektor, auch wenn es nur ein Vektor mit einem einzelnen element. Weitere Informationen zu Listen finden Sie unter Wie man Richtig Verwenden Sie Listen im R?.
pairlists enthalten kann leer benannte Elemente
Eine pairlist ist im Grunde das gleiche wie eine Liste, außer dass eine pairlist enthalten können ein leeres element, sondern eine Liste nicht. Auch eine pairlist ist konstruiert mit der
alist
Funktion.Aber, wie bereits erwähnt, Sie sind veraltet. Sie haben keinen nutzen oder Vorteil gegenüber Listen, die ich kenne.
bquote()
als ein element. Für das schreiben von Funktionen für arrays mit unbekannter Anzahl von Dimensionen, mitdo.call("[", c(list(arr), ...))
ist sehr hilfreich, dort können Sie die Liste der Argumente, die zählenbquote()
. Ich nehme anbquote()
im Grunde könnenlist
alles zu tun, dassalist
können. Keine Ahnung warum eine pairlist ist aufgerufen, eine pairlist?