我发现整数和双精度值在矩阵中表现不同,只有双数据类型返回错误答案。
#Test
m <- matrix(1:12,4,3)
which(!m[1,] %in% 1:5)
which(!m[1,] %in% 1:5)
[1] 3
但是,当我更改double / numeric中的值时,
m <- matrix(c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6), 4,3)
which(!m[1,] %in% 0.10:0.35)
[,1] [,2] [,3]
[1,] 0.1 0.5 0.3
[2,] 0.2 0.6 0.4
[3,] 0.3 0.1 0.5
[4,] 0.4 0.2 0.6
which(!m[1,] %in% 0.10:0.35)
[1] 2 3
只有2应该在答案中,因为1,3在0.10到0.35的范围内,为什么它在使用整数和数字的计算中是不同的。谢谢!
答案 0 :(得分:9)
这是因为你对:
运算符的作用有一个错误的理解。 :
并不表示范围,但确实是生成离散值序列的快捷方式(以整数间隔)。
比较
> 1:5
[1] 1 2 3 4 5
> 0.1:0.35
[1] 0.1
因此,您的第一个代码测试值是否为%in%
整数1到5的范围。但第二位代码测试您的数据是否等于0.1。
要获得您所追求的结果,您需要编写以下内容:
which(!(m[1, ] >= 0.1 & m[1, ] <= 0.35))
[1] 2