2

次のような論理配列がある場合

x = c(TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE)

上記の例で最も内側の TRUE を取得する最も簡単な方法は、インデックス 2 とインデックス 6 です。

4

2 に答える 2

3

問題が明確に定義されているかどうかはわかりませんが、この特定のケースでrleは、必要なものが得られます。

> rle(x)$lengths[1]
[1] 2
> rle(x)$lengths[1]+rle(x)$lengths[2]+1
[1] 6
于 2012-12-29T18:36:26.557 に答える
1

これはより堅牢である可能性がありますか?true と false が 2 回以上入れ替わると機能しrleません。

    # you could try it on the original vector..
    # x <- c(TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE)

    # ..but it also works on a more scattered vector
    x <- c(TRUE, FALSE , TRUE, FALSE, FALSE, FALSE, FALSE , TRUE, TRUE, TRUE)

    # find the position of all TRUEs
    true.positions <- which( x )

    # find the midpoint of the vector
    midpoint <- length( x ) / 2

    # find the smallest distance from the midpoint,
    small.dist <- ( true.positions - midpoint )

    # both above and below
    small.dist.above <- min( small.dist[ small.dist >= 0 ] )
    small.dist.below <- abs( max( small.dist[ small.dist <= 0 ] ) )

    # find the lowest position above the midpoint
    lpa <- which( small.dist.above == true.positions - midpoint )
    # find the highest position below the midpoint
    hpb <- which( small.dist.below == midpoint - true.positions )

    # if both are the midpoint, combine them
    closest.trues <- unique( c( hpb , lpa ) )

    # return the position in the original vector x
    # of the innermost TRUE
    true.positions[ closest.trues ]
于 2012-12-29T21:38:59.223 に答える