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.