ここSO(LINK)の質問で、ポスターが質問をし、私はうまくいく答えを出しましたがlist
、インデックスのリストとして渡すためにベクトルからを作成して、私を悩ませている部分があります。だから、私はこのベクトルを持っていると言います:
n <- 1:10
#> n
# [1] 1 2 3 4 5 6 7 8 9 10
それをベクトルのリストに分割したいとしましょう。各ベクトルの長さは3です。これを実現するための最良の(コードの量が最も少ない、または最も速い)方法は何ですか?10 %% 3
10/3()から1()の余りがあるので、アイテム10を捨てたいと思いlength(n) - 10 %% 3
ます。
これは望ましい結果です
list(1:3, 4:6, 7:9)
これにより、3つのグループを作成できないもののインデックスが得られます。
(length(n) + 1 - 10 %% 3):length(n)
編集
これは、これがリンクされている他のスレッドにWojciech Sobalaによって投稿された興味深いアプローチです(私は彼らにここで答えるように頼みました、そして彼らがそうするなら私はこの編集を削除します)
n <- 100
l <- 3
n2 <- n - (n %% l)
split(1:n2, rep(1:n2, each=l, length=n2))
関数として:
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))
}