Dear R users, I am trying to use apply function on a 3D array (get rid of any
loop) but wasn't successfull. Below is a toy example of what I am trying to
do: refID_remNoCat = 1:30;
s_remNoCat = sample(1:length(refID_remNoCat),size=length(refID_remNoCat));
s.sort_remNoCat = sort(s_remNoCat,index.return=TRUE);
p_ref_remNoCat = c(5,10);
nperm = 2;
nCat = 2;
N = length(refID_remNoCat);
p=1;
max_es_rand = matrix(rep(0,nCat*nperm),ncol=nperm,nrow=nCat);
Nh = rep(0,nCat);
NR = matrix(rep(0,nCat*nperm),ncol=nperm,nrow=nCat);
es_rand = array(rep(0,nCat*N*nperm),c(nCat,nperm,N));
p_ref_ix_remNoCat_rand =
array(rep(0,nCat*max(p_ref_remNoCat)*nperm),c(nCat,nperm,max(p_ref_remNoCat)));
Phit = array(rep(0,nCat*N*nperm),c(nCat,nperm,N));
Pmiss = array(rep(0,nCat*N*nperm),c(nCat,nperm,N));
set.seed(1);
for (z in 1:nCat){
for (j in 1:nperm){
Nh[z] = N-p_ref_remNoCat[z];
p_ref_ix_remNoCat_rand[z,j,1:p_ref_remNoCat[z]] =
sample(1:length(refID_remNoCat),size=p_ref_remNoCat[z],replace=FALSE);
NR[z,j] = sum(abs(s_remNoCat[p_ref_ix_remNoCat_rand[z,j,]])^p);
for (i in 1:length(refID_remNoCat)){
Phit[z,j,i] =
sum(abs(s.sort_remNoCat$x[which(s.sort_remNoCat$ix[1:i]%in%p_ref_ix_remNoCat_rand[z,j,])])/NR[z,j]);
Pmiss[z,j,i] =
(1/(N-Nh[z]))*length(which(!s.sort_remNoCat$ix[1:i]%in%p_ref_ix_remNoCat_rand[z,j,]));
es_rand[z,j,i]=Phit[z,j,i]-Pmiss[z,j,i];
}
max_es_rand[z,j]=max(es_rand[z,j,]);
}
} The main problem is the second to last line, calculation of Phit, where I am
summing the s.sort_remNoCat$x that are in p_ref_ix_remNoCat_rand so far, divided
by NR. Thank you all for your help and sorry for the long variable names. Lin
[[alternative HTML version deleted]]