我有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
Run Code Online (Sandbox Code Playgroud)
为什么?
Das*_*son 66
您没有提供可重现的示例,但您的警告消息会准确地告诉您问题所在.
memb只有10的长度.我猜dih_y2的长度$ MemberID不是10的倍数.当使用==时,如果它不是倍数就会吐出警告,让你知道它可能是没有做你期望它做的事情.==按元素检查是否相等.如果发现哪些元素dih_y2$MemeberID也在向量中,我怀疑你想做什么memb.为此,您需要使用%in%运算符.
dih_col <- which(dih_y2$MemeberID %in% memb)
Run Code Online (Sandbox Code Playgroud)
jor*_*ran 26
当你在R中的两个向量之间执行布尔比较时,"期望"是两个向量具有相同的长度,因此R可以依次比较每个对应的元素.
R有一个非常受欢迎(或讨厌)的功能,称为回收,在许多情况下,如果你试图做一些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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84339 次 |
| 最近记录: |