我遇到的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
以来X3
,X4
,NA
为max(NA, anything) = NA
?为什么只有不在第一列且小于6的条目才会更改为NA
s?
答案 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
或根据需要来回转换。