55

ベクトルのグループの最後の番号を削除する必要があります。つまり、次のようになります。

v <- 1:3
v1 <- 4:8

なる必要があります:

v <- 1:2
v1 <- 4:7
4

4 に答える 4

47

オブジェクトの長さを取得するには length を使用し、最後のオブジェクトを削除するには - を使用します。

v[-length(v)]

R の負のインデックスは、指定されたインデックス以外のすべてを抽出します。

于 2012-08-24T18:01:30.667 に答える
10

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のわずかなパフォーマンスの向上を確実に上回ります。[

于 2012-08-28T02:44:07.233 に答える
4

これは、これまで提案されていなかった別のオプションです。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
于 2016-06-12T03:05:24.153 に答える