On 03/25/2014 11:36 PM, Vermeulen, Lucie wrote:
Hi Jim,

Thanks for your help! I tried it on my own data, but there seems to be a problem with NA 
values. For regions where there is no flow or pollutant, my cells are NA. Using your 
script below changed to include NA's in flowmat, I get the error message "Error in 
if (selected_cells[row, col]) { :   missing value where TRUE/FALSE needed"

I tried several things to solve this, indicated below in the script, but none 
of them work. Do you perhaps know a solution to this?
Lucie

Hi Lucie,
If you want to test for NA in a conditional statement, put that test last, as it will be evaluated first. Of course the operator must be AND (&&) or it won't work.

# assume three flow rates
flowmat<-matrix(sample(c(1,2,3,NA),100,TRUE),nrow=10)
# directions are 1 to 8 starting at North and going clockwise
dirmat<-matrix(sample(1:8,100,TRUE),nrow=10)
# some values for pollutant concentration (?)
pollmat<-matrix(runif(100),nrow=10)
dimmat<-dim(flowmat)
# these translate the "direction" value into row and column changes
rowdirs<-c(0,1,1,1,0,-1,-1,-1)
coldirs<-c(1,1,0,-1,-1,-1,0,1)
# the matrix to be updated
newpollmat<-matrix(0,nrow=dimmat[1],ncol=dimmat[2])
for(flow in unique(flowmat)) {
 # this yields a matrix where all cells of a given flow are TRUE
 selected_cells<-flowmat == flow
 for(row in 1:dimmat[1]) {
  for(col in 1:dimmat[2]) {
   # only update the selected cells - note the extra test for NA
   if(selected_cells[row,col] && !is.na(selected_cells[row,col])) {
    newrow<-row+rowdirs[dirmat[row,col]]
    newcol<-col+coldirs[dirmat[row,col]]
    # don't go out of the matrix
    if(newrow >= 1 && newrow <= 10 && newcol >= 1 && newcol <= 10)
     # update the new pollutant matrix
     newpollmat[newrow,newcol]<-pollmat[row,col]*flowmat[row,col]
   }
  }
 }
}

Also, if you want to wrap your matrix, you can use something like this:

    newrow<-row+rowdirs[dirmat[row,col]]%%10
    newcol<-col+coldirs[dirmat[row,col]]%%10

Jim

______________________________________________
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