首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我得到“警告较长的对象长度不是较短的对象长度的倍数”?

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

Stack Overflow用户
提问于 2012-06-03 03:04:38
回答 4查看 133.8K关注 0票数 52

我有数据帧dih_y2。这两行代码给了我一个警告:

代码语言:javascript
运行
复制
> 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

为什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-03 03:13:53

您没有给出可重现的示例,但是您的警告消息确切地告诉您问题所在。

memb的长度只有10。我猜dih_y2$MemberID的长度不是10的倍数。当使用==时,如果它不是倍数,R会发出警告,让你知道它可能没有做你期望它做的事情。==执行元素级的相等性检查。我怀疑您想要做的是找出dih_y2$MemberID的哪些元素也在向量memb中。为此,您需要使用%in%运算符。

代码语言:javascript
运行
复制
dih_col <- which(dih_y2$MemeberID %in% memb)
票数 91
EN

Stack Overflow用户

发布于 2012-06-03 03:15:13

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

R有一个非常受人喜爱(或讨厌)的功能,称为recycling,在许多情况下,如果您尝试执行一些R通常希望对象具有相同长度的操作,它将自动扩展或回收较短的对象,以强制两个对象具有相同的长度。

如果较长的对象是较短对象的倍数,则这相当于简单地重复较短对象几次。通常,R程序员会利用这一点来更紧凑地做事情,并且只需要更少的输入。

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

使用以下代码探索您自己:

代码语言:javascript
运行
复制
> 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
票数 32
EN

Stack Overflow用户

发布于 2019-10-17 14:01:41

我遇到了类似的问题,解决方案是使用%in%运算符而不是== (相等)运算符:

代码语言:javascript
运行
复制
# %in%

希望能有所帮助。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10865095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档