为什么 pmax(dataFrame, int) 会引入 NA?
Why pmax(dataFrame, int) would introduce NAs?
我 运行 的行为 pmax
我不太明白:
pmax(data.frame(matrix(1:16, nrow=4)), c(6))
会return
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)
,不会自从 max(NA, anything) = NA
以来,X2
、X3
、X4
都是 NA
?为什么只把不在第一列且小于6的条目改成NA
s?
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
或根据需要来回转换
我 运行 的行为 pmax
我不太明白:
pmax(data.frame(matrix(1:16, nrow=4)), c(6))
会return
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)
,不会自从 max(NA, anything) = NA
以来,X2
、X3
、X4
都是 NA
?为什么只把不在第一列且小于6的条目改成NA
s?
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
或根据需要来回转换