我有数据帧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
为什么?
发布于 2012-06-03 03:13:53
您没有给出可重现的示例,但是您的警告消息确切地告诉您问题所在。
memb
的长度只有10。我猜dih_y2$MemberID
的长度不是10的倍数。当使用==
时,如果它不是倍数,R会发出警告,让你知道它可能没有做你期望它做的事情。==
执行元素级的相等性检查。我怀疑您想要做的是找出dih_y2$MemberID
的哪些元素也在向量memb
中。为此,您需要使用%in%
运算符。
dih_col <- which(dih_y2$MemeberID %in% memb)
发布于 2012-06-03 03:15:13
当您在R中的两个向量之间执行布尔比较时,“期望”是两个向量具有相同的长度,以便R可以依次比较每个相应的元素。
R有一个非常受人喜爱(或讨厌)的功能,称为recycling,在许多情况下,如果您尝试执行一些R通常希望对象具有相同长度的操作,它将自动扩展或回收较短的对象,以强制两个对象具有相同的长度。
如果较长的对象是较短对象的倍数,则这相当于简单地重复较短对象几次。通常,R程序员会利用这一点来更紧凑地做事情,并且只需要更少的输入。
但是如果它们不是倍数,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
发布于 2019-10-17 14:01:41
我遇到了类似的问题,解决方案是使用%in%
运算符而不是==
(相等)运算符:
# %in%
希望能有所帮助。
https://stackoverflow.com/questions/10865095
复制相似问题