x1 = c(1,2,3,4,5,6,7)
x1
[1] 1 2 3 4 5 6 7
x1[which(x1== c(5,6))]
[1] 5 6
Warning message:
In x1 == c(5, 6) :
longer object length is not a multiple of shorter object length
当我退出R然后重新打开R时,我得到了这个:
x1 = c(1,2,3,4,5,6,7)
x1
[1] 1 2 3 4 5 6 7
x1[which(x1== c(5,6))]
[1] 5 6
警告消息消失。为什么呢?
答案 0 :(得分:2)
这里有几点需要注意:
你应该收到这条消息,因为正是因为它说 - 长项目的长度不是短项目长度的倍数。这意味着你认为你正在做的事情可能不是你真正在做的事情。每次尝试运行该代码时都应该收到此消息 - 我不知道为什么一次运行它就不会收到消息。
您可以使用逻辑值索引矢量,因此这里不需要使用它。
您最有可能在%in%
运算符中查找的内容。你目前正在做的是逐元素的元素比较,较短的向量将“回收”自己,直到它与长向量的长度相同。例如:
x1 <- c(1, 2)
x2 <- c(1, 2, 3, 4)
x1 == x2
#[1] TRUE TRUE FALSE FALSE
这样做是针对x2 [1]测试x1 [1],然后针对x2 [2]测试x1 [2],然后因为x1中没有更多元素,它会循环回到开头并测试x1 [1] ]对x2 [3],然后x1 [2]对x2 [4]。
如果我们只想找到x1的哪些元素在向量x2中,那么如前所述%in%
运算符为我们处理:
x1 %in% x2
#[1] TRUE TRUE
这是要求x1 [1]是x2的一个元素? x1 [2]是x2的元素吗?等等......