访问数组的给定维数
问题描述:
假设X是D维数组。访问数组的给定维数
我想要写的函数具有两个参数:
foo<-function(X,d){
....
}
其中foo具有X. 。例如d ^个维度上运行时,提取的d ^第N维 的元素十
如何才能做到这一点(我宁愿使用数组和未列出)
答
这里是我结束了解决它:目标是要找到一个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
例如一个例子,如果'X'是一个m乘n矩阵(2D阵列),又该'FOO(X,2)'返回? – flodel 2013-04-24 18:59:16