ベクトルのグループの最後の番号を削除する必要があります。つまり、次のようになります。
v <- 1:3
v1 <- 4:8
なる必要があります:
v <- 1:2
v1 <- 4:7
オブジェクトの長さを取得するには length を使用し、最後のオブジェクトを削除するには - を使用します。
v[-length(v)]
R の負のインデックスは、指定されたインデックス以外のすべてを抽出します。
DirkとIselzerはすでに答えを提供しています。Dirkは確かに最も簡単ですが、私のシステムでは少なくともわずかに遅くなります。おそらく、ベクトルのサブセット化[
とlength
チェックが安価であるためです(ソースによると、実際には2回head
使用します)。length
> x <- rnorm(1000)
> system.time(replicate(50000, y <- head(x, -1)))
user system elapsed
3.69 0.56 4.25
> system.time(replicate(50000, y <- x[-length(x)]))
user system elapsed
3.504 0.552 4.058
このパターンは、より長いベクトル長とより多くの複製に耐えました。YMMV。の読みやすさは、ほとんどの場合head
のわずかなパフォーマンスの向上を確実に上回ります。[
これは、これまで提案されていなかった別のオプションです。NROW
ベクトルを 1 列の行列として扱います。
v[-max(NROW(v))]#1 2
v1[-max(NROW(v1))]#4 5 6 7
上記の議論に基づいて、これは提案された他のすべての方法よりも(わずかに)高速です。
x <- rnorm(1000)
system.time(replicate(50000, y <- head(x, -1)))
user system elapsed
3.446 0.292 3.762
system.time(replicate(50000, y <- x[-length(x)]))
user system elapsed
2.131 0.326 2.472
system.time(replicate(50000, y <- x[-max(NROW(x))]))
user system elapsed
2.076 0.262 2.342