가능한 한 빨리 행렬의 일부 행의 첫 번째 0을 다른 벡터에 저장된 값으로 바꾸고 싶습니다.행의 첫 번째 0 요소 바꾸기
숫자 행렬이 있으며 각 행은 몇 개의 0이있는 벡터입니다. 두 개의 벡터가 있습니다. 하나는 행을 포함하고, 하나는 대체 할 문자이고, 다른 하나는 새로운 값인 replace.in.these.rows
과 new.values
입니다.
matrix[replace.in.these.rows, corresponding.poz.of.the.1st.zero ] <- new.values
는 트릭이 있습니까 : 또한, 나는 sapply와 첫번째 제로의 벡터를 생성 할 수 있습니다 지금
mat <- matrix(1,5,5)
mat[c(1,8,10,14,16,22,14)] <- 0
replace.in.these.rows <- c(1,2,3)
new.values <- c(91,92,93)
corresponding.poz.of.1st.zero <- sapply(replace.in.these.rows,
function(x) which(mat [x,] == 0)[1])
나는 인덱스 벡터을 반복하지만,없이 가능하게 루프에 대한 뭔가를하고 싶습니다 단순 벡터보다 더 많은 색인을 생성합니까? 목록 또는 배열 (예 : 열 단위)을 색인으로 사용할 수 없습니다.
기본적으로 R 행렬은 열 벡터 집합입니다. 데이터를 이전 된 형식으로 저장하면 아무 것도 얻을 수 있습니까? 행 대신 열에서 작업하는 것을 의미합니다.
컨텍스트 :
이 행렬 저장 접촉 ID-S 네트워크들의. 이것은 인접 행렬 n x n이 아니라 n x max.number .ofpartners (또는 n * = 30) 행렬입니다.
네트워크는 기본적으로 edgelist를 사용하지만 "X의 모든 링크"를 함께 저장하려고합니다.
나는 가정하지만, 항상하여 edgelist 정보 (여러 번 시뮬레이션에서 각 라운드)
내가이 선형 적으로 증가하는 매트릭스 형태는 저장보다 빠릅니다 가정을 추출하는 것보다 이것이 더 효율적입니다 있는지 확실하지 않습니다 같은 형식의 목록에있는 동일한 정보.
이러한 문맥 상 가정에 대한 의견도 환영합니다.
'매트릭스 replace.in.these.rows + nrow (매트릭스) * (corresponding.poz.of.the.1st.zero-1)] <- new.values' – James