【发布时间】:2016-01-10 18:46:37
【问题描述】:
我在 R 中生成了以下名为 arrayDataMatrixQuantile 的数据矩阵:
DNp73flflV2324I DNp73flflV2324J DNp73flflV2324K DNp73nullV2523B DNp73nullV2523C DNp73nullV2523E ENSMUSG00000028180 8.185794 5.6914560 5.693373 6.9734687 8.8689120 5.9152113 ENSMUSG00000028182 0.000000 0.1749128 0.000000 0.1685122 0.1784736 0.1229401 ENSMUSG00000028185 0.000000 0.0000000 0.000000 0.0000000 0.0000000 0.0000000 ENSMUSG00000028184 7.439927 8.8635180 10.288115 11.8621800 13.4530467 13.4414667 ENSMUSG00000028187 7.458357 10.0175407 14.108493 11.7789400 19.7581400 12.1482933 ENSMUSG00000028186 0.400568 0.1346390 3.450423 0.1643176 0.0000000 0.0000000我想生成每个值的 log2 并输出。我写的R代码:
log2_matrix<-matrix( nrow(arrayDataMatrixQuantile),ncol(arrayDataMatrixQuantile)) #opens new matrix
for (i in 1:nrow(arrayDataMatrixQuantile)) {
for (j in 1:ncol(arrayDataMatrixQuantile)) {
add <- ((arrayDataMatrixQuantile[i,j])+10^-5) #Added 10-5 to avoid errors with 0 values
log2_matrix[i,j] <-add }
}
此代码给出以下错误:
[<-(*tmp*, i, j, value = 2.50880030780749) 中的错误:下标越界
但是,一旦我换行:
log2_matrix<-matrix( nrow(arrayDataMatrixQuantile),ncol(arrayDataMatrixQuantile))
到
log2_matrix<-matrix(0, nrow(arrayDataMatrixQuantile),ncol(arrayDataMatrixQuantile))
它有效。我不知道如何在新矩阵中添加“0”来消除错误。当我看到其他用户在每个新矩阵的开头添加一个 0 时,我就使用了它。对此有何建议?
【问题讨论】:
-
试试
apply(arrayDataMatrixQuantile, 2, FUN=function(x) x+ 10^-5) -
谢谢。它有效,但我仍然不明白为什么 0 会在我的初始代码中解决问题。这是我经常遇到的事情。对此有何建议?
-
如果你检查代码
matrix( nrow(arrayDataMatrixQuantile),ncol(arrayDataMatrixQuantile)),它的维度是6、1,值是6。所以,你需要在nrow(array..之前添加,,这样它就会返回NA的6*6矩阵matrix的用法是matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)第一种情况,data部分没有给出 -
哦!!好的。最后这很清楚。谢谢!