W pytaniu tutaj na SO (LINK) plakat zadał pytanie, a ja dałem odpowiedź, która działa, ale jest część, która mnie burzy, tworząc list
z wektora, aby przekazać jako lista indeksów. Więc les, że mam ten wektor:Zrób listę wektorów o równej długości.
n <- 1:10
#> n
# [1] 1 2 3 4 5 6 7 8 9 10
Powiedzmy, że chcesz podzielić ją na listę wektorach i każdy wektor ma długość 3. Jaki jest najlepszy (najkrótszy ilość kodu & lub najszybsze) sposób osiągnąć to? Chcemy rzucić item 10, ponieważ pozostała część 1 (10 %% 3
) z 10/3 (length(n) - 10 %% 3
).
Jest to pożądany efekt
list(1:3, 4:6, 7:9)
To da nam indeksy tych, które nie mogą dokonać grupa trzech:
(length(n) + 1 - 10 %% 3):length(n)
EDIT
Oto ciekawe podejście zamieszczone przez Wojciecha Sobala na other thread jest to związane z (poprosiłem ich o odpowiedź tutaj, a jeśli to zrobię, usuniemy t jego edycja)
n <- 100
l <- 3
n2 <- n - (n %% l)
split(1:n2, rep(1:n2, each=l, length=n2))
Jako funkcję:
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))
}
Wszystkie wielkie odpowiedzi, ale myślę, że X On jest najkrótszym kodem. Dzięki, to mnie wkurzyło. O wiele lepsze podejście niż to, co robiłem. –