Konvertieren for-Schleife anwenden
In R, wie ersetzt man den folgenden code mithilfe von Funktionen wie apply
, lapply
, rapply
, do.call
usw.?
u <- 10:12
slist <- list()
for (i in 1:length(u)) {
p <- combn(u, i)
for (j in 1:ncol(p)) {
s <- paste(p[,j], collapse=",")
slist[[s]] <- 0
}
}
Für diesen Teil:
for (j in 1:ncol(p)) {
s <- paste(p[,j], collapse=",")
Habe ich versucht, etwas wie:
s <- apply(p, 2, function(x) paste(x, collapse=","))
Die funktioniert. Aber dann slist[[s]] <- 0
im selben for-Schleife, ich weiß nicht, was zu tun ist.
Edit: Dies ist, was ich versuche zu tun. Für den Vektor u
ist, bin ich produziert, eine Liste aller Teilmengen in der Richtung. Dann für jede Teilmenge, ich bin die Zuordnung zu s
, dann mit dem string s
wie der name eines Elements in slist
. Irgendwie seltsam, ich weiß, aber es ist für eine Hausaufgabe. Für den code oben, würde dieser die ersten 5 Elemente slist:
> slist
$`10`
[1] 0
$`11`
[1] 0
$`12`
[1] 0
$`10,11`
[1] 0
$`10,12`
[1] 0
Yeah, ich versuche nur zu lernen, wie man anwenden und Sachen richtig.
- Ihre
for
Schleife erzeugt eine eher ungewöhnliche Liste. Vielleicht möchten Sie erklären, was es ist, Sie wirklich versuchen, zu tun? - Okay, fertig! Ich bearbeitet die original-Beitrag.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Lösung:
UPDATE Gepostet zur gleichen Zeit wie @djhurio, ist es sehr ähnlich, aber ich nahm mir die Freiheit die änderung der Nutzung von
combn
so verarbeitetu
von der Länge 1, da @djhurio hingewiesen.indvec <- unlist(lapply( sapply(1:3, combn, x=u) , function(z) apply(z, 2, paste, collapse=",") ) )
Lösung mit einem
apply
und einelapply
. Funktioniert auch, wennlength(u)==1
.Andere Lösung, ohne die Notwendigkeit für anonyme Funktionen. Die
mapply
vectorizescombn
, währendrapply
durchläuft die Kombination Liste rekursiv, reduzieren Sie mit,
.