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))
我想我可以通过将dimlist
的每个元素赋值为-2*max(dim(x))
来将一个解决方案捏合在一起,但哎呀。
(顺便说一下,我有其他函数可以通过melt/recast
或可怕的“构建一个字符串然后eval(parse(mystring))
”来完成所需的工作,但我希望做得“更好”)
编辑:顺带一提,我对一个使用了melt&acast
的函数(相当于DWin的TRUE设置)运行了这段代码的版本,后者比前者慢了几倍,这并不奇怪。
flipdim
。在创建后,dimList
是一个空列表,因为我的工作区中没有x
对象。现在有了,不清楚您是否真的希望dimlist有6个项目长度。 - IRTFM(dimlist<-vector('list', length(dim(x)))
会抛出一个错误。 - IRTFM