Arrays 数组切片上的向量化和

Arrays 数组切片上的向量化和,arrays,r,Arrays,R,假设我有一个三维数组: set.seed(1) foo <- array(rnorm(250),dim=c(5,10,5)) 但这会按行和层分割阵列,而且速度非常慢,因为它没有矢量化。我还可以添加切片: foo[,4,]+foo[,5,]+foo[,6,] 这是更快,但有点乏味的手动多片。是否有一个函数可以在不手动指定每个切片的情况下执行上述表达式?这个函数如何: eval(parse(text=paste(sprintf('foo[,%i,]',4:6),collapse='+'))

假设我有一个三维数组:

set.seed(1)
foo <- array(rnorm(250),dim=c(5,10,5))
但这会按行和层分割阵列,而且速度非常慢,因为它没有矢量化。我还可以添加切片:

foo[,4,]+foo[,5,]+foo[,6,]
这是更快,但有点乏味的手动多片。是否有一个函数可以在不手动指定每个切片的情况下执行上述表达式?

这个函数如何:

eval(parse(text=paste(sprintf('foo[,%i,]',4:6),collapse='+')))

我知道有理由避免
解析
,但我不确定在这种情况下如何避免

我认为您正在寻找
rowSums/colSums
(应用
的快速实现)


+我回答得很好,就是把我也打败了。几个月前我也遇到过类似的问题,
aperm()
解决方案在这方面起到了帮助作用。我知道
rowSums()
colSums()
但它们产生了意想不到的结果
aperm()
似乎确实解决了这个问题,谢谢!
eval(parse(text=paste(sprintf('foo[,%i,]',4:6),collapse='+')))
colSums(aperm(foo[,4:6,], c(2,1,3)))

> all.equal(colSums(aperm(foo[,4:6,], c(2,1,3))), foo[,4,]+foo[,5,]+foo[,6,])
[1] TRUE