是否有原生 R 语法来提取数组的行?

Is there a native R syntax to extract rows of an array?

假设我在 R 中有一个 N 维数组(矩阵将是一个二维数组),我想 select 我的数组中从 1 到 n 的行。我想知道在不知道维数的情况下是否有在 R 中执行此操作的语法。 确实可以

x = matrix(0, nrow = 10, ncol = 2)
x[1:5, ] # to take the 5 first rows of a matrix

x = array(0, dim = c(10, 2, 3))
x[1:5, , ] # to take the 5 first rows of a 3D array

到目前为止,我还没有找到一种方法来使用这种写法在不知道维数的情况下提取数组的行(显然,如果我知道维数,我只需要输入尽可能多的逗号如所须)。以下代码片段有效,但似乎不是最原生的方法:

x = array(0, dim = c(10, 2, 3, 4)
apply(x, 2:length(dim(x)), function(y) y[1:5])

是否有更多的 R 方法可以实现此目的?

实际上,您应用的解决方案是最好的。

apply(x, 2:length(dim(x)), `[`, 1:5)

甚至如@RuiBarradas 指出的那样更好(也请为他的评论投票!):

apply(x, -1, `[`, 1:5)

来自 Lisp,我可以说,R 非常 lispy。 apply 解决方案是一个非常 lispy 的解决方案。 因此它非常 R-ish(遵循函数式编程范式的解决方案)。

函数 slice.index() 很容易被忽略(据我所知,我付出了代价!请参阅 magic::arow()),但在这种情况下很有用:

x <- array(runif(60), dim = c(10, 2, 3))
array(x[slice.index(x,1) %in% 1:5],c(5,dim(x)[-1]))

HTH,罗宾