From ru|pb@rr@d@@ @end|ng |rom @@po@pt  Fri Feb 12 12:25:48 2021
From: ru|pb@rr@d@@ @end|ng |rom @@po@pt (Rui Barradas)
Date: Fri, 12 Feb 2021 11:25:48 +0000
Subject: [Rd] Unexpected behavior of '[' in an apply instruction
Message-ID: <a8eac065-c1ea-a165-2d92-c4802b4d0373@sapo.pt>

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



[Rd] Unexpected behavior of '[' in an apply instruction
Rui Barradas