R 访问数组的给定维度

R 访问数组的给定维度,r,R,假设X是一个D维数组 我想用两个参数编写一个函数: foo<-function(X,d){ .... } foo如果数组有D个维度,则不能通过指定标量来引用单个维度。相反,您需要提供一个维度向量。例如,如果您的数组是: set.seet(123) X <- array(data=rnorm(12),dim=c(2,2,3)) set.seet(123) X请参见?应用,下面是一个简单的示例: x = array(c(1:8), dim = c(2,2,2)) #, , 1

假设X是一个D维数组

我想用两个参数编写一个函数:

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

foo如果数组有D个维度,则不能通过指定标量来引用单个维度。相反,您需要提供一个维度向量。例如,如果您的数组是:

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

X请参见
?应用
,下面是一个简单的示例:

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

我最终解决了这个问题:目标是找到一种标准方法,将
apply()
无缝地替换为
lappy()
(因为后者很容易被并行化)。 下面是一个简单的
apply()

#数据

例如,如果
X
是一个m-by-n矩阵(2D数组),那么
foo(X,2)
应该返回什么?
#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)