对矩阵进行R运算,如果要避免NaN警告

时间:2016-06-15 16:05:51

标签: r matrix

我有两个矩阵,pt1和pt2,示例如下:

pt1[1,] = 9.819 1.839 1.542 1.236 1.137 0.774 0.774 0.608 0.527 0.327 0.324 0.245 0.133 0.111 0.110 0.067 0.038 0.018 0.007 0.002 0.000 0.000
pt2[1,] = 9.9770359 1.8361173 1.6109915 1.2507719 1.0475069 0.7834792 0.7832150 0.6610241 0.5318586 0.3857874 0.3084728 0.2700538 0.1439364 0.1220980 0.1056596 0.0679037 0.0373881 0.0220959 0.0068046 0.0018711 0.0000000 0.0000000

我必须执行这样的日志操作:

rt2 <- log(pt2/pt1)*0.5

然而,正如预期的那样,最后两个值将产生NaN,因为pt1值为零(除以零)。这显示了一个警告:

Warning message:
In log(pt2/pt1) : NaNs produced

我使用ifelse来纠正(并期望它删除警告):

r2 <- ifelse(pt1==0 | pt2==0, 0, log(pt2/pt1)*0.5)

不再生产NaN,但仍会显示警告。

我该怎么做以避免警告?

谢谢!

2 个答案:

答案 0 :(得分:0)

以下是使用下标的一种方法:

<div class="tabs">
  <span class="tab">
    <input type="radio" name="ch" id="check1">
    <label for="check1">
      Tab 1
    </label>
  </span>
  <span class="tab">
    <input type="radio" name="ch" id="check2">
    <label for="check2">
      Tab 2
    </label>
  </span>
  <span class="tab">
    <input type="radio" name="ch" id="check3">
    <label for="check3">
      Tab 3
    </label>
  </span>
</div>
<div class="contents">
  <div class="content" id="tab1">Contenido 1</div>
  <div class="content" id="tab2"><strong>Contenido 2</strong></div>
  <div class="content" id="tab3"><em>Contenido 3</em></div>
</div>

答案 1 :(得分:0)

您可以使用suppressWarnings()

pt1 <- matrix(rnorm(2200), nrow = 100)
pt2 <- matrix(rnorm(2200), nrow = 100)
rt2 <- suppressWarnings(log(pt2/pt1)*0.5)
head(rt2[,1:5],2)
           [,1]      [,2] [,3]       [,4]   [,5]
[1,] -0.1209207 0.8211299  NaN -0.3271424    NaN
[2,] -0.3916372       NaN  NaN        NaN 1.1085

rt2[is.na(rt2)] <- 0
head(rt2[,1:5],2)
           [,1]      [,2] [,3]       [,4]   [,5]
[1,] -0.1209207 0.8211299    0 -0.3271424 0.0000
[2,] -0.3916372 0.0000000    0  0.0000000 1.1085

我希望这会有所帮助。