[R] Array arithmetic

Benilton Carvalho bcarvalh at jhsph.edu
Thu Mar 6 20:03:03 CET 2008


apparently you forgot the "commented, minimal, self-contained,  
reproducible code" part...

L = 10
M = 20
N = 30
P = 40
set.seed(1)
A = array(rnorm(L*M*N*P), dim=c(L, M, N, P))
B = array(rnorm(L*M*N), dim=c(L, M, N))
B[sample(100, 10)] = 0
C = array(0, dim=c(L, M, N, P))
for (i in 1:L) {
for (j in 1:M) {
for (k in 1:N) {
   if (abs(B[i, j, k]) > 10e-5)  C[i, j, k,] <- A[i, j, k,]/B[i, j, k]
   else C[i, j, k,] <- 0
}
}
}
blah = function(x, y){tmp = x/y; tmp[abs(y) <= 10e-5]=0; return(tmp)}
D = sweep(A, 1:3, B, blah)
identical(C, D)

b

On Mar 6, 2008, at 1:33 PM, Gang Chen wrote:

> I have two arrays A and B with dimensions of (L, M, N, P) and (L, M,
> N), and I want to do
>
> for (i in 1:L) {
> for (j in 1:M) {
> for (k in 1:N) {
>   if (abs(B[i, j, k]) > 10e-5)  C[i, j, k,] <- A[i, j, k,]/B[i, j, k]
>   else C[i, j, k,] <- 0
> }
> }
> }
>
> How can I get C more efficiently than looping?
>
> Thanks,
> Gang
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list