我希望能够构造一个do.call
子集公式,而不必识别输入数组中每个维度的实际范围。我遇到的问题是我无法弄清楚如何模仿直接函数x[,,1:n,]
,在其他维度中没有条目意味着“抓住所有元素”。
这是一些示例代码,但失败了。据我所知,[
或者用索引do.call
替换我的NULL
列表值。1
x<-array(1:6,c(2,3))
dimlist<-vector('list', length(dim(x)))
shortdim<-2
dimlist[[shortdim]] <- 1: (dim(x)[shortdim] -1)
flipped <- do.call(`[`,c(list(x),dimlist))
我想我可以通过将值分配给 的-2*max(dim(x))
每个元素来组合解决方案dimlist
,但是很糟糕。
(FWIW,我有替代功能可以通过melt/recast
或可怕的“构建一个字符串然后”来完成所需的工作eval(parse(mystring))
,但我想“做得更好”。)
编辑:顺便说一句,我针对使用的函数运行了这个代码的一个版本(相当于 DWin 的 TRUE 设置)melt & acast
;后者慢了好几倍,这不足为奇。