This is for ACroske but I can't find his email so I'll just send it to the list. Hi ACroske: The code below takes a zeros and ones matrix and puts ones in the places you wanted. It can be made shorter ( maybe ?. i haven't thought about that ) but first let me know if that's what you wanted ? The original matrix is called binary.matrix and the final matrix is called tempbinmat. it should work for any size matrix but i didn't check for speed so it might be slow if the original matrix is large.

# CREATE PROBABILITY MATRIX
prob.matrix<-matrix(runif(36,0,0.5),ncol=6)
#print(prob.matrix)

# CREATE BINARY MATRIX BASED ON PROB MATRIX

binary.matrix<-matrix(rbinom(length(prob.matrix),prob=prob.matrix,size=1),nrow=nrow(prob.matrix))
print(binary.matrix)

# CREATE DUMMY ROW AND COL AND
# ADD THEM TO THE MATRIX SO THAT
# LATER ON, WE DON"T HAVE TO WORRY
# ABOUT FILLING AN ELEMENT THAT
# ISN"T THERE
zerorow <- numeric(ncol(binary.matrix)+2)
zerocol <- numeric(nrow(binary.matrix))

#ADD COL TO BEGINNING AND END
tempbinmat <- cbind(zerocol,binary.matrix,zerocol)
# ADD RO TO TOP AND BOTTOM
tempbinmat <- rbind(zerorow,tempbinmat,zerorow)
# GET RID OF NAMES
colnames(tempbinmat) <- NULL
rownames(tempbinmat) <- NULL

# FIND OUT WHERE ALL THE ONES ARE.
# ARR.IND = TRUE GIVES THEM BACK IN MATRIX FORM
whichres <- which(tempbinmat == 1, arr.ind=TRUE)

# THIS LAPPLY GOES THROUGH THE LOCATIONS WHERE
# THERE ARE ONES AND FINDS LOCATIONS WHERE
# ONES NEED TO BE ADDED
onespositions <- lapply(1:nrow(whichres),function(.rownum) {
  rightspot <- c(whichres[.rownum,1], whichres[.rownum,2]+1)
  leftspot <- c(whichres[.rownum,1], whichres[.rownum,2]-1)
  belowspot <-c(whichres[.rownum,1]-1, whichres[.rownum,2])
  abovespot <- c(whichres[.rownum,1]+1, whichres[.rownum,2])
  temp <- rbind(rightspot,leftspot,belowspot,abovespot)
})

# THIS SETS THE CONSTRUCTED INDICES TO 1
for ( i in 1:length(onespositions) ) {
  tempbinmat[onespositions[[i]]] <- 1
}

#print(tempbinmat)

# NOW GET RID OF THE ROWS AND COLUMNS THAT WERE  ARTIFICALLY
ADDED AT THE START TO MAKE THINGS EASIER
tempbinmat <- tempbinmat[2:(nrow(tempbinmat)-1),2:(ncol(tempbinmat)-1)]
print(tempbinmat)

______________________________________________
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.

Reply via email to