我有一个数组x
,我事先并不知道它的尺寸。如何仅索引最后一个维度?例如:
trimGibbsChain <- function (x, ntrim) {
toTrim <- -(1:ntrim)
return(x[,,,toTrim]) # How many commas?
}
问题是,当你不知道数组的维度时,你不知道要放多少个逗号。最快的方法是什么?
答案 0 :(得分:1)
这可以通过使用列表作为索引使用[
进行子集来完成:
lastInd <- function(x, n){
nd <- length(dim(x))
# uncomment the following line if x could be a plain vector without dim
# if(nd == 0) nd = 1
inds <- rep(alist(,)[1], nd)
inds[nd] <- n
do.call(`[`, c(list(x), inds))
}
无法找到一个现有功能,但以下内容应该有效: x是一个至少为2-dim的数组; n是最后一个暗淡的索引;
lastInd <- function(x, n){
d <- dim(x)
d.new <- d[-length(d)]
block.size <- prod(d.new)
res <- x[(block.size * (n - 1) + 1):(block.size * n)]
array(res, dim = d.new)
}
处理x是普通向量时的情况:
lastInd <- function(x, n){
d <- dim(x)
if(is.null(d)){
x[n]
}else{
d.new <- d[-length(d)]
block.size <- prod(d.new)
res <- x[(block.size * (n - 1) + 1):(block.size * n)]
array(res, dim = d.new)
}
}
一个例子:
x <- array(1:12, dim = c(2, 2, 3))
lastInd(x, 2)
# [,1] [,2]
# [1,] 5 7
# [2,] 6 8
lastInd(2:4, 3)
# [1] 4