为什么我会得到“警告更长的对象长度不是更短的对象长度的倍数”?

我有dataframe dih_y2。 这两行给我一个警告:

> memb = dih_y2$MemberID[1:10] > dih_col = which(dih_y2$MemberID == memb) Warning message: In dih_y2$MemberID == memb : longer object length is not a multiple of shorter object length 

为什么?

你没有给出一个可重复的例子,但你的警告信息告诉你到底是什么问题。

memb只有10的长度。我猜dih_y2 $ MemberID的长度不是10的倍数。当使用==它会吐出一个警告,如果它不是一个倍数,让你知道它可能没有做你期望的事情。 ==元素检查是否相等。 我怀疑你想要做什么,如果发现dih_y2$MemeberID中的哪些元素也在向量dih_y2$MemeberID中。 要做到这一点,你会想要使用%in%运算符%in%

 dih_col <- which(dih_y2$MemeberID %in% memb) 

当在R中的两个向量之间执行布尔比较时,“期望”是两个向量具有相同的长度,以便R可以依次比较每个对应的元素。

R有一个非常喜欢(或讨厌)的function,称为回收 ,在许多情况下,如果你试图做一些R通常期望物体具有相同长度的东西,它会自动扩展或回收较短的物体,对象具有相同的长度。

如果较长的物体是较短的几倍,则相当于简单地重复几次较短的物体。 通常情况下,R程序员会利用这一点来更紧凑地完成任务,而且打字less。

但是,如果它们不是倍数,R会担心你可能犯了一个错误,也许并不意味着要进行这种比较,因此是警告。

用下面的代码探索一下自己:

 > x <- 1:3 > y <- c(1,2,4) > x == y [1] TRUE TRUE FALSE > y1 <- c(y,y) > x == y1 [1] TRUE TRUE FALSE TRUE TRUE FALSE > y2 <- c(y,2) > x == y2 [1] TRUE TRUE FALSE FALSE Warning message: In x == y2 : longer object length is not a multiple of shorter object length