我有两个数据帧,一个包含基因的表达值(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).
现在我正在计算它们之间的比率,并将值填充到空的dataframe中。
for (i in 1:nrow(control.mRNA)) {
for (j in 1:nrow(control.miRNA)) {
m[i,j] <- control.miRNA[j]/control.mRNA[i]
}
}但这不管用。对于乘法,有函数“交叉”,但我没有找到任何除法。
发布于 2014-10-23 15:51:57
你可以用outer。下面是一个simpl( is )e示例:
u <- 1:5
v <- c(3,7)
outer(u, v, "/")结果是一个矩阵,其中5列(u中的coefs #),2列(v中的coefs )列,系数为u[i] / v[j],行i和col j。为了使u[j] / v[i]位于行i和col 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) )https://stackoverflow.com/questions/26531930
复制相似问题