Hello, I am having trouble creating a (1000,3,201) array in R from a data set created within the same script. My problem is that I want to take a matrix that is 1000x603 (called "landmat") and separate this into 201 separate (1000x3) matrices. My problem is when I try to do particular combinations of the columns. I want to take the first 3 columns of "landmat" and create the first 1000x3 matrix, then I want to take columns 4,5,6 of "landmat" and create the second matrix, then continue this process until all 603 columns have been used resulting in the 201 unique 1000x3 matrices. Any help would be appreciated and my code is pasted below:
#======================================================================== #landscape changes #======================================================================== ##generate 3 sequences, each of length n=21; sequences named theta"n"_set1 theta1_set1=c(seq(0,1,0.005)) seqa=c(seq(0,0.50,0.005)) seqb=c(seq(0.495,0,-0.005)) theta2_set1=c(seqa,seqb) seqc=c(seq(1,0,-0.01)) seqd=c(rep(0,100)) theta3_set1=c(seqc,seqd) sum=numeric() for (i in 1:201) { sum[i]= theta1_set1[i]+theta2_set1[i]+theta3_set1[i] } sum #"n" designates the number of random #'s to be generated from rnorm #"x"combines all three strings of landscape scenarios into one vector #"sd" tells the std dev. used when generating #'s from rnorm #"p"indicates that x is 63 observation in length #mat" is a vector of randomly generated numbers from the normal dist'bn #using n, the first value of x and sd #designate a "for loop" that loops over the remaining observations in x #and inserts them as the mean of the normal distribution from which the #random numbers are generated n=1000 x=c(theta1_set1,theta2_set1,theta3_set1) p = length(x) mat <- rep(x[1],n) for (i in 2:p) { mat <- cbind(mat,rep(x[i],n)) } #sort the matrix columns so that 201 unique landscape combinations are #created; each set of 3 columns should sum to one landmat=cbind(mat[,c(1)],mat[,c(202)],mat[,c(403)]) for (i in 2:201) { landmat=cbind(landmat,(cbind(mat[,c(i)],mat[,c(i+201)],mat[,c(i+402)]))) } ##this loop is a check to ensure the triplets all sum to 1 #sum=numeric() #n=1 #landmat_vec=landmat[1,] #for (i in 1:201) #{ #sum[i]=landmat_vec[n]+landmat_vec[n+1]+landmat_vec[n+2] #n=n+3 #} #create vector of column names in "hab" for each matrix and attach using #"colnames(matrix)" hab<-c("theta1","theta2","theta3") colnames(landmat)=rep(hab,201) *********The following for loop is not working****** ## separate the columns of landmat(dim:1000x603) # into 201 separate 1000x3 matrices dims=c(1000,3,201) n=1 landscape=array(dim=dims) for (i in 1:201) { landscape[i]=landmat[ ,c(n,n+1,n+2)] n=n+3 } -- Curtis Burkhalter [[alternative HTML version deleted]] ______________________________________________ R-help@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.