【发布时间】:2014-12-17 19:50:56
【问题描述】:
这个问题可能与this question 有关。我不明白为什么使用[ 对矩阵进行子集化时返回的向量包含NA 值。
set.seed(1234)
xmpl <- matrix(sample(c(1:4, NA_real_), 25, replace = TRUE), 5, 5)
# > xmpl
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 4 4 NA 2
# [2,] 4 1 3 2 2
# [3,] 4 2 2 2 1
# [4,] 4 4 NA 1 1
# [5,] NA 3 2 2 2
# > xmpl[xmpl == 1]
# [1] 1 NA 1 NA NA 1 1 1
替换工作如我所料:
xmpl[xmpl == 1] <- 10
# > xmpl
# [,1] [,2] [,3] [,4] [,5]
# [1,] 10 4 4 NA 2
# [2,] 4 10 3 2 2
# [3,] 4 2 2 2 10
# [4,] 4 4 NA 10 10
# [5,] NA 3 2 2 2
从矩阵中提取向量时,我应该使用%in% 而不是== 吗?为什么分配/替换行为与子集行为不同 - 即。当xmpl[xmpl == 1] <- 10 调用时,为什么NA 值不会被10 替换。
【问题讨论】:
-
在这里用肢体出去,行为是不同的,因为提取取决于
[,而提取/替换取决于[<- -
虽然有些人会抱怨按键次数加倍,但
%in%在大多数情况下可以替代(并且比使用更好)==。xmpl[xmpl %in% 1]; xmpl[xmpl %in% c(1, NA)]