Subsetting the "ROW"s of an object
On 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?
You can use TRUE to fill the subscripts for dimensions 2:nd
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 <-
function(x,i)
{
mc <- quote(x[i])
nd <- max(1L, length(dim(x)))
mc[seq(4, length=nd-1L)] <- rep(list(TRUE), nd - 1L)
mc[["drop"]] <- FALSE
eval(mc)
}
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
HTH, Chuck