假设我在R中有一个N维的数组(一个矩阵是一个2维的数组),我想选择我的数组中从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])有没有更好的方法来实现这一点?
发布于 2021-02-12 16:58:06
实际上,你的应用方案是最好的。
apply(x, 2:length(dim(x)), `[`, 1:5)或者就像@RuiBarradas指出的那样更好(也请投票给他的评论!):
apply(x, -1, `[`, 1:5)来自Lisp,我可以说,R是非常灵活的。而apply解决方案是一个非常灵活的解决方案。因此,它非常具有R-ish特性(遵循函数式编程范例的解决方案)。
发布于 2021-02-13 05:31:26
函数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,罗宾
https://stackoverflow.com/questions/66168564
复制相似问题