首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有原生R语法来提取数组的行?

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

Stack Overflow用户
提问于 2021-02-12 16:34:33
回答 2查看 126关注 0票数 7

假设我在R中有一个N维的数组(一个矩阵是一个2维的数组),我想选择我的数组中从1到n的行。我想知道在R中是否有语法可以在不知道维数的情况下做到这一点。事实上,我能做到

代码语言:javascript
复制
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

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

代码语言:javascript
复制
x = array(0, dim = c(10, 2, 3, 4)
apply(x, 2:length(dim(x)), function(y) y[1:5])

有没有更好的方法来实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-12 16:58:06

实际上,你的应用方案是最好的。

代码语言:javascript
复制
apply(x, 2:length(dim(x)), `[`, 1:5)

或者就像@RuiBarradas指出的那样更好(也请投票给他的评论!):

代码语言:javascript
复制
apply(x, -1, `[`, 1:5)

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

票数 6
EN

Stack Overflow用户

发布于 2021-02-13 05:31:26

函数slice.index()很容易被忽略(正如我知道的那样!参见magic::arow()),但在这种情况下可能很有用:

代码语言:javascript
复制
x <- array(runif(60), dim = c(10, 2, 3))
array(x[slice.index(x,1) %in% 1:5],c(5,dim(x)[-1]))

HTH,罗宾

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66168564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档