为什么pmax(dataFrame,int)会引入NA?

时间:2015-05-15 17:33:32

标签: r dataframe na

我遇到的pmax行为让我无法理解:

pmax(data.frame(matrix(1:16, nrow=4)), c(6))

将返回

  X1 X2 X3 X4
1  6 NA  9 13
2  6  6 10 14
3  6  7 11 15
4  6  8 12 16

我不明白为什么只有小于6且不在第一列中的条目变为NA - 如果我们通过行回收c(6, NA, NA, NA),则不会全部自X2以来X3X4NAmax(NA, anything) = NA?为什么只有不在第一列且小于6的条目才会更改为NA s?

1 个答案:

答案 0 :(得分:5)

pmax不适用于data.frame输入。

错误在pmax的第35行引入:

mmm[change] <- each[change]

因为each被定义为与输入的length一样长,而data.frame是列数。因此,当它试图解决第5个元素时,它会得到NA。

each
[1] 6 6 6 6
each[change]
[1]  6  6  6  6 NA

明显的解决方法是在使用pmax后转换为data.frame:

data.frame(pmax(matrix(1:16, nrow=4), c(6)))
  X1 X2 X3 X4
1  6  6  9 13
2  6  6 10 14
3  6  7 11 15
4  6  8 12 16

或根据需要来回转换。