Ich habe nie eine befriedigende Antwort auf diese Frage gefunden. Angenommen, ich habe eine Funktion:Übergabe eines Listenarguments an llply
foo <- function(a,b,c) {
...
}
a
ist eine Liste viele data.frame
Objekte
b
ist eine Liste, die eine spezielle Klasse von Daten (Klasse ppp
aus der Bibliothek spatstat
, ob das hilft vorhanden) enthält.
c
ist eine ganze Zahl.
und ich möchte eine Liste durch diese Funktion drücken:
result <- llply(a, foo, b,c)
Die Namen der Listenelemente in b
entsprechen die Spalte „Typ“ in der data.frames in Liste a
. Also innerhalb foo
Funktion kann ich schnell tun:
id <- which(names(b) == unique(a$type))
baseline_pattern <- b[[id]]
jede zugrunde liegende räumlichen Muster in b mit der rechten data.frame in einem anzupassen. Es gibt ungefähr 10 Artikel in b und 1000 Artikel in einem. Leider funktioniert das nicht, weil llply
(oder lapply
im Allgemeinen) versucht, ein Listenelement unter a
Zeit, auch für die Argumentliste b
und die beiden Zeilen des Codes die richtige Liste Element in b
mit dem richtigen Datenrahmen schlägt fehlschlägt, weil die Funktion hat nicht mehr die gesamte Liste b
. Gibt es einen Weg dazu?
In einer Prise könnte ich eine andere Liste (effektiv kombinieren a
und b
) erstellen, wobei jedes Listenelement selbst eine Liste mit der Länge 2 ist, die das data.frame
und das entsprechende Punktmusterobjekt enthält. Dies führt jedoch zu Tausenden von redundanten Kopien (und macht die Ausführung dieser Operation auf einem Cluster weitaus weniger effizient).
UPDATE: Ich plane, dies in eine mclapply
um dies auf einem Cluster zu betreiben. Ich kann das nicht mit mapply
(es sei denn, es gibt eine mcmapply
).
Wie sich herausstellt, gibt es ein 'mcmapply' in R 2.15.0. Zeit für ein Upgrade ...? –