# Re: [R] Array arithmetic

From: Benilton Carvalho <bcarvalh_at_jhsph.edu>
Date: Thu, 06 Mar 2008 14:03:03 -0500

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