R use apply when arguments contain arrays and scalars

Viewed 89

I want to avoid the following loop:

for(i in 1:2){
vectVal[i] = myFunc(M[,,i],S[,,i],phi2, sig2)
}

by using the apply function.

The problem is that the arguments passed to the apply function contain arrays (--> M and S) and scalars (--> phi2 and sig2).

I tried the following:

apply(M,3,myFunc, S = S, phi2 = phi2, sig2 = sig2)

which resulted in an error message because S is an array and not a matrix as required in myFunc (see below):

Here is a reproducible code:

M = array(data = c(
  0.5, 0.7, 0.45,
  0.5, 0.3, 0.45,
  0.5, 0.7, 0.3,
  0.5, 0.3, 0.7,
  0.5, 0.7, 0.45,
  0.5, 0.3, 0.55),
  dim = c(3,2,2),
)

S = array(data = c(
   0.7723229, -0.2149794, -0.2159068,
  -0.2149794,  0.7723229, -0.2083123,
  -0.2159068, -0.2083123,  0.7723229,
   0.7723229, -0.2149794, -0.2149794,
  -0.2149794,  0.7723229, -0.1783025,
  -0.2149794, -0.1783025,  0.7723229,
   0.7723229, -0.2149794, -0.2176665,
  -0.2149794,  0.7723229, -0.2111496,
  -0.2176665, -0.2111496,  0.7723229),
   dim = c(3,3,2)
)

phi2 = 0.5
sig2 = 0.3

myFunc = function(M, S, phi2, sig2){
  valMult = M[,1]%*%diag(S)
  valEnd = valMult + phi2 - sig2
return(valEnd)
}

vectVal = vector(length = 2)

for(i in 1:2){
  vectVal[i] = myFunc(M[,,i],S[,,i],phi2, sig2)
}

vectVal

Does someone has an idea?

1 Answers
Related