R 访问数组的给定维度
假设X是一个D维数组 我想用两个参数编写一个函数: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
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)