如何在矩阵中选择多个单元格并对相同大小的另一个矩阵中的相应单元格执行操作?

时间:2014-03-24 13:52:23

标签: r

我正在尝试编写一个R脚本来在世界河流中进行污染路由,并且在选择矩阵单元坐标并将其应用于相同维度的其他矩阵时需要一些帮助。

我的数据:我有几个矩阵对应于半度网格(360行,720列)的世界河流的水文参数。这些基质代表流量积累(流入该细胞的细胞数量),流动方向(8个周围细胞中的哪个细胞流入某个细胞的负荷)和污染物负荷。

我的想法:从河流的起点到终点计算每个网格单元中的污染物负荷。我可以基于流量累积(从低到高)。但是,每个流域可以有多个具有相同流量累积值的单元。

问题:我需要选择流量累积的每个值的所有矩阵单元格(从低到高),找到它们的坐标(行,列),并使用流向矩阵将相应的污染物负载转移到正确的相邻单元格。我尝试了各种方法,但是选择正确单元格的坐标并将它们应用到另一个矩阵中我无法工作。

我将举例说明我曾经尝试过的,在一个流域上使用两个for循环。在此示例中,流向值为1表示需要将污染物负载转移到右侧的相邻单元格(行相同,列+1):

 BasinFlowAccumulation <-FlowAccumulation[Basin]

 BasinFlowAccumulationMaximum <- max(BasinFlowAccumulation)

 BasinFlowDirection <-FlowDirection[Basin]

 BasinPollutant <-Pollutant[Basin]


 b<-0

for(i in 0:BasinFlowAccumulationMaximum){

cells.index<-which(BasinFlowAccumulation[]==b, arr.ind=TRUE)

for (j in 1:length(cells.index)){
    print(BasinFlowDirection[cells[j]])
    Row<-BasinPollutant[cells[j[1]]]
    Column<-BasinPollutant[cells[j[2]]]
    ifelse(BasinFlowDirection[cells.index[j]]==1, BasinPollutant[Row,(Column+1)]<-BasinPollutant[Row,(Column+1)]+Basinpollutant[Row,Column]

 }
b<-b+1

 }

非常感谢任何建议!

0 个答案:

没有答案