我有两个数据框,一个包含基因的表达值(n = 2000),另一个包含microRNA的表达值(n = 350)。我想计算每个microRNA与每个基因的比例,然后将其可视化。
这是我正在做的事情:
我首先创建了一个空数据框
m <- as.data.frame(matrix(0, ncol = 350, nrow = 2000))
三个数据框是m
,(2000,350)control.mRNA
(2000,1)和control.miRNA
(350,1)。
现在我正在计算彼此的比率,并将值填入空数据框
for (i in 1:nrow(control.mRNA)) {
for (j in 1:nrow(control.miRNA)) {
m[i,j] <- control.miRNA[j]/control.mRNA[i]
}
}
但这不起作用。 对于乘法,有函数&#34; crossprod&#34;但是我没有找到任何分裂的东西。
答案 0 :(得分:1)
您可以使用outer
。这是一个简单的(istic)e例子:
u <- 1:5
v <- c(3,7)
outer(u, v, "/")
结果是一个矩阵,其中5行(u
)行中的系数为#2,v
中的系数为u[i] / v[j]
列,行{{1}中的系数为i
和col j
。要在行u[j] / v[i]
和列i
中设置j
,您可以使用转置运算符t
:
M1 <- t(outer(u, v, "/"))
outer
将向量作为参数,而不是矩阵。这可以通过首先将矩阵转换为向量来轻松处理。
我们采用与以前相同的示例,但使用U
和V
两个矩阵而不仅仅是向量:
U <- matrix(1:5)
V <- matrix(c(3,7))
M2 <- t( outer(drop(U), drop(V), "/") )
另一个解决方案是稍微转换U
和V
并使用矩阵乘法运算符%*%
:
M3 <- t( U %*% t(1/V) )