En una pregunta aquí en SO (LINK) un cartel hizo una pregunta y respondí que funciona pero hay una parte que me molesta, creando un list
de un vector para pasar como una lista de índices. Así que les digo que tengo este vector:Haz una lista de vectores de igual longitud
n <- 1:10
#> n
# [1] 1 2 3 4 5 6 7 8 9 10
Digamos que quiero dividirlo en una lista de vectores y cada vector es de longitud 3. ¿Cuál es la mejor (menor cantidad de código & o más rápida) a lograr esto? Queremos descartar el artículo 10 ya que hay un resto de 1 (10 %% 3
) de 10/3 (length(n) - 10 %% 3
).
Este es el resultado deseado
list(1:3, 4:6, 7:9)
Esto nos dará los índices de los que no pueden hacer que un grupo de tres:
(length(n) + 1 - 10 %% 3):length(n)
EDITAR
He aquí una enfoque interesante publicado por Wojciech Sobala en el other thread al que está vinculado (les pedí que respondieran aquí y si lo hacen eliminaré t su edición)
n <- 100
l <- 3
n2 <- n - (n %% l)
split(1:n2, rep(1:n2, each=l, length=n2))
En función:
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))
}
Todos los grandes respuestas, pero creo que X , Él es el código más breve. Gracias, eso me estaba molestando. Todos los enfoques son mucho mejores que lo que estaba haciendo. –