From l@wrence@mich@el @ending from gene@com  Fri Jun  8 19:15:27 2018
From: l@wrence@mich@el @ending from gene@com (Michael Lawrence)
Date: Fri, 8 Jun 2018 10:15:27 -0700
Subject: [Rd] Subsetting the "ROW"s of an object
In-Reply-To: <CABdHhvF9R3Mpk9pMMy8wa=qXzGta9cXdb9BYKT4P69QRuU3rig@mail.gmail.com>
References: <CABdHhvF9R3Mpk9pMMy8wa=qXzGta9cXdb9BYKT4P69QRuU3rig@mail.gmail.com>
Message-ID: <CAOQ5Nyd_y5fiSb7M=-3sVCx3QewkxzAOzckqvAHwK63b-PYNEw@mail.gmail.com>

There probably should be an abstraction for this. In S4Vectors, we
have extractROWS().

Michael

On Fri, Jun 8, 2018 at 8:45 AM, Hadley Wickham <h.wickham at gmail.com> wrote:
> Hi all,
>
> Is there a better to way to subset the ROWs (in the sense of NROW) of
> an vector, matrix, data frame or array than this?
>
> subset_ROW <- function(x, i) {
>   nd <- length(dim(x))
>   if (nd <= 1L) {
>     x[i]
>   } else {
>     dims <- rep(list(quote(expr = )), nd - 1L)
>     do.call(`[`, c(list(quote(x), quote(i)), dims, list(drop = FALSE)))
>   }
> }
>
> subset_ROW(1:10, 4:6)
> #> [1] 4 5 6
>
> str(subset_ROW(array(1:10, c(10)), 2:4))
> #>  int [1:3(1d)] 2 3 4
> str(subset_ROW(array(1:10, c(10, 1)), 2:4))
> #>  int [1:3, 1] 2 3 4
> str(subset_ROW(array(1:10, c(5, 2)), 2:4))
> #>  int [1:3, 1:2] 2 3 4 7 8 9
> str(subset_ROW(array(1:10, c(10, 1, 1)), 2:4))
> #>  int [1:3, 1, 1] 2 3 4
>
> subset_ROW(data.frame(x = 1:10, y = 10:1), 2:4)
> #>   x y
> #> 2 2 9
> #> 3 3 8
> #> 4 4 7
>
> It seems like there should be a way to do this that doesn't require
> generating a call with missing arguments, but I can't think of it.
>
> Thanks!
>
> Hadley
>
> --
> http://hadley.nz
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



[Rd] Subsetting the "ROW"s of an object
Michael Lawrence