0

X が D 次元配列であるとします。

2 つの引数を持つ関数を書きたい:

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

ここで、foo は X の d^ 次元で実行する必要があります。たとえば、X の d^ 次元の要素を抽出します。

これを行うにはどうすればよいですか (リストではなく配列を使用したい)

4

3 に答える 3

1

配列に D 次元がある場合、スカラーを指定して単一の次元を参照することはできません。代わりに、次元のベクトルを指定する必要があります。たとえば、配列が次の場合:

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

たとえばX[2]、配列の単一の要素が得られます。しようX[2,1]とすると、次元数が正しくないというエラーが表示されます。したがって、次元全体を取得する唯一のオプションは、長さ D のベクトルを提供することです。この場合、要素の 1 つが空になりますX[1,1,]。これにより、定義に対応する 3 つの要素で構成されるこの特定の例では、配列のそれぞれの次元が得られます。

当然、他の (指定された) 寸法は、定義された境界内で変化する可能性がありますX[1,2,]

于 2013-04-24T19:13:46.903 に答える
0

を参照してください?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
于 2013-04-24T19:28:07.757 に答える
0

これが私が最終的に解決した方法です。目的は、をシームレスに置き換える標準的な方法を見つけることでしapply()lapply()(後者は簡単に並列化できるため)。これは簡単な例です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) 
于 2013-04-26T21:17:05.073 に答える