2015-06-22 61 views
2

我通過循環在它們的尺寸,例如像這樣的操作中的R陣列:如何在R中保存數組索引元組?

arr <- array(runif(6), dim=c(2,3)) 
for (i in 1:2) { 
    for (j in 1:3) { 
    arr[i, j] <- arr[i, j] + 1 
    } 
} 

在我的應用程序有許多尺寸和多個陣列在內部循環來操作(與更復雜的操作比添加1)。爲了使代碼更具可讀性,我想以某種方式將元組[i, j]保存在對象中,例如idx,然後重新使用idx來訪問陣列。下面的代碼無法正常工作,但它描述了最好的,我想在內環達到什麼:

idx <- c(i, j)    # this is wrong 
arr[idx] <- arr[idx] + 1 

我應該把上面c(i, j)呢?請記住,我實際上使用了2個以上的維度,例如[i, j, k, l, m, n]

回答

1

這是有點棘手,但只要您將數組和索引包裝到列表中,然後再將它們組合到更大的列表中,您就可以使用do.call

arr <- array(1:8,dim=c(2,2,2)) 
idx <- list(1,1,1) 
do.call("[",c(list(arr),idx)) 
[1] 1 
do.call("[",c(list(arr),list(1,2,1))) 
[1] 3