为了账号安全,请及时绑定邮箱和手机立即绑定

为什么会出现“警告较长的对象长度不是较短的对象长度的倍数”?

/ 猿问

为什么会出现“警告较长的对象长度不是较短的对象长度的倍数”?

潇湘沐 2019-11-03 08:04:58

我有数据框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

为什么?


查看完整描述

3 回答

?
元芳怎么了

您没有提供可复制的示例,但是您的警告消息告诉您确切的问题所在。


memb的长度只有10。我猜dih_y2 $ MemberID的长度不是10的倍数。使用==时,如果它不是倍数,则会发出警告,让您知道它可能是不按照您的期望去做。==对元素进行相等性检查。我怀疑如果找到dih_y2$MemeberID向量中的哪些元素也要做什么memb。为此,您需要使用%in%运算符。


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



查看完整回答
反对 回复 2019-11-04
?
汪汪一只猫

当您在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



查看完整回答
反对 回复 2019-11-04
?
宝慕林4294392

我有一个类似的问题,但它与对象的结构和类有关。我会检查如何dih_y2$MemberID格式化。

查看完整回答
反对 回复 2019-11-04

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信