2017-04-07 18 views
0

주 대각선을 따라 최대 값을 갖는 행렬 X가 있습니다. 먼저, 하나의 행 i를 샘플링하고 주 대각선 값, 즉 max! = X [i, i]를 제외하고 행 i에 따른 최대 값을 선택하려고합니다.주 대각선의 값을 제외한 행렬의 최대 값을 샘플로 만듭니다.

아래 코드는 일반적으로 결과를하지만 종종 오류가 있습니다 Error in if (MAX < l[k]) { : missing value where 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) 
for (l in 1:n) { 
    str_mat[l,l] = 1 
} 

int_mat = matrix(rbinom(n*n,1,z),n,n) ##z takes the values 0.1 - 0.9 
for (j in 1:n) { 
    int_mat[j,j] = 1 
} 

X = (int_mat*str_mat)*pop 
b = c(1:n) #creating a vector with the length being the dimensions of the matrix 
a = sample(b,1)## sampling one value from the vector 
if (sum(int_mat[a,])< n) 
{ 
    ### int_mat is a binary matrix 
    break 
}} 

l = X[a,] 

## Ensuring the maximum value picked is not on the main diagonal 
MAX = 0 
j = 1 
for (k in 1:length(l)) { 
    if(k!=a) { 
    if (MAX<l[k]) { 
     MAX = l[k] 
     j = k 
    } 
    } 
} 
+1

ABX 란 무엇입니까? 컨텍스트 및 데이터를 추측 할 필요없이 R로 실행할 수있는 최소 ** 재현 가능한 ** 예를 제공해주세요. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

+0

예, 재현 할 수있는 최소한의 예제를 제공해야합니다. 그냥 임의의 시드 정수를 사용하여 a, b, X를 선언하십시오. – smci

+1

또한 차원 n의 크기가 얼마나 크며 그 값의 범위에 대해 무엇을 알 수 있습니까? X가 너무 크지 않다면 복사본을 만들고'diag (X2) <- -Inf'를 설정할 수 있습니다. 이제 주 대각선에서 최대 값을 얻을 수 없습니다. 그리고 그것이 크다면 아마도 희소 행렬 표현을 사용할 수있을 것입니다. – smci

답변

0

감사합니다 모두 당신의 기여. 문제를 해결하는 방법을 알아 냈습니다. 그 내용은 다음과 같습니다.

X=(int_mat*str_mat)*pop ## creating a matrix of interaction, competition strength and 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)  ## from the sampled row in str_mat check the position of all zeros 
k=sample(j_k,1)