R - 参数中的矩阵乘法是不一致的,但应该是

时间:2017-11-10 23:59:46

标签: r matrix boolean linear-algebra

我正在研究基因调控网络的布尔网络表示。以下是具有最小基因的代码的简化版本,用于调试目的。我首先创建表示网络中基因之间的调节关系的矩阵,以及与四种不同细胞类型相关的调节状态。

对于不起作用的部分......在每次迭代中,evolve函数根据上游调节器的状态为每个基因分配一个新状态(0表示“off”或1表示“on”)。这需要基因状态载体与调节相互作用矩阵的矩阵相乘。

此代码的目标是在使用随机生成的这些基因的初始ON / OFF状态迭代10,000次后,计算监管网络与四种已知配置之一稳定的次数,与不同的细胞类型相关联。

请帮我弄清楚为什么这个矩阵乘法不起作用。我被告知参数是不一致的,但矢量和矩阵满足矩阵乘法的要求(左矢量中的行数等于右矩阵中的#columns,R应该能够在矩阵之间进行矩阵乘法和矢量)

library(prodlim)    
genes <- c("SHR", "SCR", "JKD")
N <- length(genes)

gene_adjacency_matrix <- matrix(nrow=N, ncol=N)
gene_adjacency_matrix[,] <- 0
rownames(gene_adjacency_matrix) <- genes
colnames(gene_adjacency_matrix) <- genes

gene_adjacency_matrix["SHR", "SCR"] <- 1
gene_adjacency_matrix["SCR", "SCR"] <- 1
gene_adjacency_matrix["JKD", "SCR"] <- 1

num_cell_types <- 4
fixed_points_matrix <- matrix(nrow=num_cell_types, ncol=N)
fixed_points_matrix[,] <- 0
colnames(fixed_points_matrix) <- genes

fixed_points_matrix[1,"SHR"] <- 1
fixed_points_matrix[1,"SCR"] <- 1
fixed_points_matrix[1,"JKD"] <- 1
fixed_points_matrix[2,"SHR"] <- 1
fixed_points_matrix[2,"SCR"] <- 0
fixed_points_matrix[2,"JKD"] <- 0
fixed_points_matrix[3,"SHR"] <- 1
fixed_points_matrix[3,"SCR"] <- 0
fixed_points_matrix[3,"JKD"] <- 1
fixed_points_matrix[4,"SHR"] <- 0
fixed_points_matrix[4,"SCR"] <- 0
fixed_points_matrix[4,"JKD"] <- 0

fixation_counter <- vector(length=num_cell_types, mode="integer")
fixation_counter[] <- 0

evolve <- function(state) {
  result <- state %*% gene_adjacency_matrix 
  result[result > 0] <- 1
  result[result == 0] <- state[result == 0]
  result[result < 0] <- 0
  return(result)    
}

nsim <- 10000
for(i in 1:nsim) {
  state <- N; sample(c(0,1), replace=TRUE, size=N)
  state_previous <- state
  state <- evolve(state)
  if(state == state_previous) {quit}
  matched_cell_state <- row.match(state, fixed_points_matrix)
  fixation_counter[matched_cell_state] <- (fixation_counter[matched_cell_state] + 1)
  print(fixation_counter)
}

Error in state %*% gene_adjacency_matrix : non-conformable arguments
> state
[1] 3
> state <- N; sample(c(0,1), replace=TRUE, size=N)
[1] 0 1 1
> gene_adjacency_matrix
    SHR SCR JKD
SHR   0   1   0
SCR   0   1   0
JKD   0   1   0

感谢您的建议!

0 个答案:

没有答案