2017-11-03 3 views
0

Ich habe eine Liste, wieListe auf einen Vektor mit bedingter Logik

lst <- list(1, c(3, 4, 6), c(2, 5)) 

Jedes erstes Element dieser Liste vorrangige Bedeutung hat. Sie können die Zahlen in den Listenpositionen denken. Zum Beispiel gibt es 1 bis 6 Positionen, wo Position 1 nicht mit anderen kombiniert wird. Position 4 und 6 kombiniert mit der Position 3 und Position 5 mit Position kombiniert 2. Jetzt brauche ich einen Vektor zu erstellen,

W1 W2 W3 W4 W5 W6 
W1 W2 W3 W3 W2 W3 

Dies ist ein benannter Vektor. Der Name ist der Name einer Position und die Werte sind die Position, mit der sie kombiniert werden. Das scheint einfach zu sein, erfordert aber viel Zeit. Vielen Dank im Voraus.

Antwort

1
res <- character(length(unlist(lst))) 
names(res) <- paste0("W", seq_along(unlist(lst))) 
lapply(lst, function(x) res[x] <<- paste0("W", x[1])) 
res 
# W1 W2 W3 W4 W5 W6 
# "W1" "W2" "W3" "W3" "W2" "W3" 

bearbeiten

Vielleicht ist dies einer jener Fälle, in denen eine for Schleife besser ist (und vermeidet <<-):

res <- character(length(unlist(lst))) 
names(res) <- paste0("W", seq_along(unlist(lst))) 
for (x in lst) res[x] <- paste0("W", x[1]) 
res 
# W1 W2 W3 W4 W5 W6 
# "W1" "W2" "W3" "W3" "W2" "W3" 
0

Eine weitere Alternative. Bitte überprüfen und geben Sie die Zeiten an, wenn möglich. Es könnte anderen helfen.

t<-list() 
for(t1 in lst){t[paste0("w",t1)]<-paste0("w",t1[1])} 
output<-unlist(t, recursive = TRUE, use.names = TRUE) 
Verwandte Themen