我正在研究基因调控网络的布尔网络表示。以下是具有最小基因的代码的简化版本,用于调试目的。我首先创建表示网络中基因之间的调节关系的矩阵,以及与四种不同细胞类型相关的调节状态。
对于不起作用的部分......在每次迭代中,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
感谢您的建议!