在R中填充具有一定条件的矩阵

时间:2012-05-11 03:00:54

标签: algorithm r

给定大小为MN的矩阵, 我们想用整数值填充每一行(> = 0) 这样它就可以达到一定的价值。

请注意,MN的维度是使用预先计算的 某些公式,以保证匹配 给定所需条件的填充(即下面的sum_val)。

这是两个例子

#sum_val <-2
#m<-6
#n<-3

# the value of "sum_val" may vary
# and 'm' 'n' also change depends on it

# First are initialized using 0
#mat <- matrix(0,nrow=m,ncol=n);


# Below results are hand coded:
       [,1] [,2] [,3]
[1,]    1    1    0   # Sum of each rows here is equal to 'sum_val = 2'
[2,]    1    0    1
[3,]    0    1    1
[4,]    2    0    0
[5,]    0    2    0
[6,]    0    0    2

另一个例子:

> sum_val<-2;
#m<-15
#n<-5
#mat <- matrix(0,nrow=m,ncol=n);

# Below results are hand coded:
       [,1] [,2] [,3] [,4] [,5]
 [1,]    1    1    0    0    0   # rows also sums up to 2 
 [2,]    1    0    1    0    0
 [3,]    1    0    0    1    0
 [4,]    1    0    0    0    1
 [5,]    0    1    0    0    1
 [6,]    0    0    1    0    1
 [7,]    0    0    0    1    1
 [8,]    0    1    0    1    0
 [9,]    0    1    1    0    0
[10,]    0    0    1    1    0
[11,]    2    0    0    0    0
[12,]    0    2    0    0    0
[13,]    0    0    2    0    0
[14,]    0    0    0    2    0
[15,]    0    0    0    0    2

我坚持使用以下循环:

> for (ri in 1:m) {
+     for (ci in 1:n) {
+      
+        
+        # Not sure how to proceed from here
+        if(ci==2) {
+             mat[ri,ci] <- 1;
+        }
+     }
+ }

解决问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:6)

以下是我的解决方法!

library(partitions)

sum_val <- 2
n <- 5

t(as.matrix(compositions(sum_val, n)))
      [,1] [,2] [,3] [,4] [,5]
 [1,]    2    0    0    0    0
 [2,]    1    1    0    0    0
 [3,]    0    2    0    0    0
 [4,]    1    0    1    0    0
 [5,]    0    1    1    0    0
 [6,]    0    0    2    0    0
 [7,]    1    0    0    1    0
 [8,]    0    1    0    1    0
 [9,]    0    0    1    1    0
[10,]    0    0    0    2    0
[11,]    1    0    0    0    1
[12,]    0    1    0    0    1
[13,]    0    0    1    0    1
[14,]    0    0    0    1    1
[15,]    0    0    0    0    2