robin hankin
2021-Feb-12 20:45 UTC
[Rd] Unexpected behavior of '[' in an apply instruction
Rui> x <- array(runif(60), dim = c(10, 2, 3)) > array(x[slice.index(x,1) %in% 1:5],c(5,dim(x)[-1]))(I don't see this on stackoverflow; should I post this there too?) Most of the magic package is devoted to handling arrays of arbitrary dimensions and this functionality might be good to include if anyone would find it useful. HTH Robin <hankin.robin at gmail.com> On Sat, Feb 13, 2021 at 12:26 AM Rui Barradas <ruipbarradas at sapo.pt> wrote:> Hello, > > This came up in this StackOverflow post [1]. > > If x is an array with n dimensions, how to subset by just one dimension? > If n is known, it's simple, add the required number of commas in their > proper places. > But what if the user doesn't know the value of n? > > The example below has n = 3, and subsets by the 1st dim. The apply loop > solves the problem as expected but note that the index i has length(i) > 1. > > > x <- array(1:60, dim = c(10, 2, 3)) > > d <- 1L > i <- 1:5 > apply(x, MARGIN = -d, '[', i) > x[i, , ] > > > If length(i) == 1, argument drop = FALSE doesn't work as I expected it > to work, only the other way does: > > > i <- 1L > apply(x, MARGIN = -d, '[', i, drop = FALSE) > x[i, , drop = FALSE] > > > What am I missing? > > [1] > > https://stackoverflow.com/questions/66168564/is-there-a-native-r-syntax-to-extract-rows-of-an-array > > Thanks in advance, > > Rui Barradas > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >[[alternative HTML version deleted]]
Rui Barradas
2021-Feb-12 21:23 UTC
[Rd] Unexpected behavior of '[' in an apply instruction
Hello, Yes, although there is an accepted solution, I believe you should post this solution there. It's a base R solution, what the question asks for. And thanks, I would have never reminded myself of slice.index. Rui Barradas ?s 20:45 de 12/02/21, robin hankin escreveu:> Rui > > > x <- array(runif(60), dim = c(10, 2, 3)) > > array(x[slice.index(x,1) %in% 1:5],c(5,dim(x)[-1])) > > (I don't see this on stackoverflow; should I post this there too?)? Most > of the magic package is devoted to handling arrays of arbitrary > dimensions and this functionality might be good to include if anyone > would find it useful. > > HTH > > Robin > > > <mailto:hankin.robin at gmail.com> > > > On Sat, Feb 13, 2021 at 12:26 AM Rui Barradas <ruipbarradas at sapo.pt > <mailto:ruipbarradas at sapo.pt>> wrote: > > Hello, > > This came up in this StackOverflow post [1]. > > If x is an array with n dimensions, how to subset by just one dimension? > If n is known, it's simple, add the required number of commas in their > proper places. > But what if the user doesn't know the value of n? > > The example below has n = 3, and subsets by the 1st dim. The apply loop > solves the problem as expected but note that the index i has > length(i) > 1. > > > x <- array(1:60, dim = c(10, 2, 3)) > > d <- 1L > i <- 1:5 > apply(x, MARGIN = -d, '[', i) > x[i, , ] > > > If length(i) == 1, argument drop = FALSE doesn't work as I expected it > to work, only the other way does: > > > i <- 1L > apply(x, MARGIN = -d, '[', i, drop = FALSE) > x[i, , drop = FALSE] > > > What am I missing? > > [1] > https://stackoverflow.com/questions/66168564/is-there-a-native-r-syntax-to-extract-rows-of-an-array > > Thanks in advance, > > Rui Barradas > > ______________________________________________ > R-devel at r-project.org <mailto:R-devel at r-project.org> mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >