2015-07-02 24 views
2

有没有简单的方法来根据数组中的每个单元格的索引使用函数来初始化数组?有没有办法使用R中的表达式/函数来初始化一个数组?

例如,如果我想创建具有等于i值的数组+ J + K,使得(例如):

> A[1,2,3] 
    6 
> A[4,8,9] 
    21 

我想沿的线的东西:

A <- array(i+j+k , dim=c(10,10,10) , dimnames=list(i,j,k))

我首先需要创建一个我想要的大小的数组,然后将一个函数应用到该数组(即两阶段过程)?或者有没有办法在创建矩阵的同时初始化所有的值?

回答

3

嵌套outer电话似乎做的伎俩(这里只是高达3能见度):

outer(outer(1:3,1:3,"+"),1:3,"+") 

或者复制你的例子:

> A=outer(outer(1:10,1:10,"+"),1:10,"+") 
> A[1,2,3] 
[1] 6 
> A[4,8,9] 
[1] 21 
1

另一种选择是使用expand.grid

v1 <- 1:10 
l <- length(v1) 
n <- 3 
A <- array(rowSums(expand.grid(rep(list(v1), n))), dim= rep(l, n)) 
A[1, 2, 3] 
#[1] 6 
A[4, 8, 9] 
#[1] 21 
相关问题