Let’s say we define an array in R as follows –
temp_array = array(1, dim = c(I, J, K))
then we generate a list that contains this array in R,
temp_data_list = list(temp_array = temp_array)
then what should we do in stan to properly read in this three-dimensional array in the “data” section?
Thank you!
data {
int<lower=0> I;
int<lower=0> J;
int<lower=0> K;
int<lower=1> temp_array[I,J,K];
}
Thank you! Then what is the difference between using
temp_array[I,J,K]
and
matrix[J,K] temp_array[I]?
Or, more specifically, what should I do in R to transform the original data (three dimensional array) to fit in matrix[J, K] temp_array[I]?
You want a list of I
matrices, each of which has J
rows and K
columns. The conceptual difference is that each element of temp_array
is a matrix in Stan and thus you can do matrix operations with it.
Thank you! Now if we have an I by J matrix defined in R, then when I pass it into Stan, what’s the difference betwween
data {
int<lower=0> I;
int<lower=0> J;
real temp_mat[I,J];
}
and
data {
int<lower=0> I;
int<lower=0> J;
matrix[I,J] temp_mat;
}
?
Both conceptually and practically (in terms of preparing the data in R)?
Got it! Thank you!
One more thing, let’s say now I have already defined matrix[J,K] temp[L], and I wish to work on the j-th row of the i-th matrix in the list “temp”, what code should I type? Should I do temp[l][i,:] ?
Actually I have found some posts / tutorials that are related to this topic, but I didn’t find any of them providing an example about this particular issue.
Thank you very much.
Now I wish to define a three-dimensional array (J by K by L) in “transformed parameter” block,
matrix[J,K] A[L];
and then assign values to it in the following way
for(l in 1:L){
for(k in 1:K){
A[l][,k] = temp_fun(J);
}
}
where temp_fun() is a function defined to be able to return a vector of length J each time, however, when I do something like this in my code, I got error message saying that
“Illegal statement beginning with non-void expression parsed as…”
Thus what might be the issues in my code that could lead to this kind of error?
Thank you!
I don’t know, but it isn’t coming from those lines.
I kept other parts unchanged, except for replacing A[l][,k] by a vector of length J –
vector[J] test_vec;
and now it works. Very odd.