Skip to content

How to refer to the last a few rows?

6 messages · Peng Yu, Baptiste Auguie, jim holtman +1 more

#
On Mon, Sep 14, 2009 at 9:37 AM, baptiste auguie
<baptiste.auguie at googlemail.com> wrote:
Is there a convenient function like 'tail()' to extract last a few
columns? I can use t(tail(t(x),2)). But I feel convenient if there is
a function can give me such thing directly.
#
will this do:
[,1] [,2] [,3] [,4] [,5]
[1,]    1    6   11   16   21
[2,]    2    7   12   17   22
[3,]    3    8   13   18   23
[4,]    4    9   14   19   24
[5,]    5   10   15   20   25
[,1] [,2] [,3]
[4,]   24   19   14
[5,]   25   20   15

        
On Thu, Nov 5, 2009 at 8:05 AM, Peng Yu <pengyu.ut at gmail.com> wrote:

  
    
#
On Thu, Nov 5, 2009 at 7:24 AM, jim holtman <jholtman at gmail.com> wrote:
I would avoid to type the variable name twice. Because this is very
inconvenient when the variable name is long.

a_loooooooooooooooooong_expression_or_variable[nrow(a_loooooooooooooooooong_expression_or_variable),]

BTW, you misunderstood my question. My question was whether is a
better way to get the last a few columns than 't(tail(t(x),2))'.
#
tail =
function (x, n = 6L, colwise=FALSE, ...)
{
    stopifnot(length(n) == 1L)
    nrx <- if(colwise) ncol(x) else nrow(x)
    n <- if (n < 0L)
        max(nrx + n, 0L)
    else min(n, nrx)
if (colwise)
  x[ ,seq.int(to = nrx, length.out = n), drop = FALSE] else
  x[seq.int(to = nrx, length.out = n), , drop = FALSE]
}

m = matrix(1:30, 5)

tail(m,2)
tail(m, 2, colwise=TRUE)


HTH,

baptiste

2009/11/5 Peng Yu <pengyu.ut at gmail.com>:
#
With the flexibility of R, you can always create a function that will
allow you to avoid retyping.
On Thu, Nov 5, 2009 at 9:17 AM, Peng Yu <pengyu.ut at gmail.com> wrote:

  
    
#
Peng Yu wrote:
Maybe not. I would say a reasonably standard R-ish way would
be

nc <- ncol(x); x[,(nc-5):nc]

Re: really long variable names, perhaps changing your variable naming style
would
be helpful?

If you frequently want the last few columns, then maybe writing

tailcol <- function(x,n=5) {
   nc <- ncol(x); n <- max(0,nc-n); x[,(nc-n):nc]
}
(or something like that; you should decide what you want to happen
when n>nc)

and putting it in your own personal set of utilities would be helpful ...