访问数组的给定维数

问题描述:

假设X是D维数组。访问数组的给定维数

我想要写的函数具有两个参数:

foo<-function(X,d){ 
    .... 
} 

其中foo具有X. 。例如d ^个维度上运行时,提取的d ^第N维 的元素十

如何才能做到这一点(我宁愿使用数组和未列出)

+2

例如一个例子,如果'X'是一个m乘n矩阵(2D阵列),又该'FOO(X,2)'返回? – flodel 2013-04-24 18:59:16

这里是我结束了解决它:目标是要找到一个lapply()无缝替换apply()一种标准的方式(因为后者可以很容易地被平行化)。 下面是一个简单的apply()

#data 
n<-10 
p<-5 
k<-15 
x<-array(rnorm(n*p*k),dim=c(n,p,k)) 


fx01<-function(ll,x,d0,dm,fun1){ 
    dm[[d0]]<-ll 
    gotfun<-get(fun1) 
    gotfun(x[dm[[1]],dm[[2]],dm[[3]]]) 
} 

#housekeeping: 
d0<-3 
lx<-length(dim(x)) 
dm<-vector("list",lx) 
for(i in 1:lx) dm[[i]]<-1:dim(x)[i] 

#the actual computations: 
res<-lapply(1:dim(x)[d0],fx01,x=x,d0=d0,dm=dm,fun1="mean") 
c(res,recursive=TRUE) 
#compare with the real thing: 
apply(x,d0,mean) 

如果阵列具有d尺寸,比你无法通过指定标是指一个维度。相反,您需要提供维度向量。例如,如果您的阵列是:

set.seet(123) 
X <- array(data=rnorm(12),dim=c(2,2,3)) 

然后例如X[2]会给你一个数组的单个元素。如果您尝试X[2,1],则会收到关于不正确的维数的错误。因此获得整个维度的唯一选择是提供长度为D的矢量,其中一个元素将是空的,例如, X[1,1,]。这将为您提供数组的相应维度,在此特定示例中由3个元素组成,这与定义相对应。当然,其他(指定的)尺寸可以在所定义的边界内变化,例如, X[1,2,]

看到?apply,这里有一个简单的例子:

x = array(c(1:8), dim = c(2,2,2)) 
#, , 1 
# 
#  [,1] [,2] 
#[1,] 1 3 
#[2,] 2 4 
# 
#, , 2 
# 
#  [,1] [,2] 
#[1,] 5 7 
#[2,] 6 8 

apply(x, 3, sum) 
#[1] 10 26