r - Sample the maximum value on a matrix excluding value on main diagonal -
i have matrix x maximum value along main diagonal. firstly, want sample 1 row i, , pick maximum value along row excluding main diagonal value i.e max != x[i,i].
the code below produces results has error: error in if (max < l[k]) { : missing value true/false needed
# initial values n = 10 pop = runif(n,min =0,max =1) d = matrix(rnorm(n*n,0,0.2),nrow=n) str_mat = abs(d) (l in 1:n) { str_mat[l,l] = 1 } int_mat = matrix(rbinom(n*n,1,z),n,n) ##z takes values 0.1 - 0.9 (j in 1:n) { int_mat[j,j] = 1 } x = (int_mat*str_mat)*pop b = c(1:n) #creating vector length being dimensions of matrix = sample(b,1)## sampling 1 value vector if (sum(int_mat[a,])< n) { ### int_mat binary matrix break }} l = x[a,] ## ensuring maximum value picked not on main diagonal max = 0 j = 1 (k in 1:length(l)) { if(k!=a) { if (max<l[k]) { max = l[k] j = k } } }
thanks contribution. figured out how go problem. below;
x=(int_mat*str_mat)*pop ## creating matrix of interaction, competition strength , population densities repeat{ introwsums=rowsums(int_mat) introwsums_greater=which(introwsums>2,arr.ind = t) if (length(introwsums_greater)>1){ a= sample(introwsums_greater,1) }else{ a=introwsums_greater } if (sum(int_mat[a,])< n){ break }} q= abx[a,] j_k=which(q!=q[a] & q!=0,arr.ind = t) ## sampled row in str_mat check position of zeros k=sample(j_k,1)
Comments
Post a Comment