In einer Frage hier auf SO (LINK) ein Plakat stellte eine Frage, und ich gab eine Antwort, die funktioniert, aber es gibt einen Teil, der mich stört, ein list
aus einem Vektor zu erstellen, um als Liste zu übergeben von Indizes. So les sagen, ich habe diesen Vektor:Machen Sie eine Liste der gleichen Länge Vektoren
n <- 1:10
#> n
# [1] 1 2 3 4 5 6 7 8 9 10
Sagen wir, ich möchte es in eine Liste von Vektoren brechen und jeder Vektor ist der Länge 3. Was ist der beste (kürzeste Code & oder am schnellsten) Weg dies erreichen? Wir wollen Artikel 10 wegwerfen, da es einen Rest von 1 (10 %% 3
) vom 03.10. (length(n) - 10 %% 3
) gibt.
Dies ist das gewünschte Ergebnis
list(1:3, 4:6, 7:9)
Dies gibt uns die Indizes von denen, die nicht eine Gruppe von drei machen können:
(length(n) + 1 - 10 %% 3):length(n)
EDIT
Hier ein Interessanter Ansatz geschrieben von Wojciech Sobala auf der other thread das ist verknüpft mit (Ich bat sie, hier zu antworten, und wenn sie das tun, werde ich t entfernen seine bearbeiten)
n <- 100
l <- 3
n2 <- n - (n %% l)
split(1:n2, rep(1:n2, each=l, length=n2))
Als Funktion:
indices <- function(n, l){
if(n > l) stop("n needs to be smaller than or equal to l")
n2 <- n - (n %% l)
cat("numbers", (n + 1 - n %% l):n, "did not make an index of length", l)
split(1:n2, rep(1:n2, each=l, length=n2))
}
Alle großen Antworten, aber ich denke X , Er ist der kürzeste Code-weise. Danke, das nervte mich. Alles viel bessere Ansätze als was ich tat. –