首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你是如何用通俗易懂的英语读%运算符的?

你是如何用通俗易懂的英语读%运算符的?
EN

Stack Overflow用户
提问于 2021-04-15 16:46:44
回答 3查看 149关注 0票数 3

我很难用“通俗易懂的英语”来理解R中的%in%操作符。我已经看到了多个使用它的代码示例,但对于如何读取它并没有给出明确的解释。

例如,我找到了管道操作符%>%的术语,它建议将其读为“然后”。我正在为%in%操作符寻找类似的翻译。

在题为“数据转换”的第五章“数据科学”一书中,有一个飞行数据集的例子如下:

以下代码查找11月或12月起飞的所有航班: 过滤器(航班,月== 11个月== 12) x %in% y是解决这个问题的有效方法之一.这将选择x是y中值之一的每一行。我们可以使用它重写上面的代码: nov_dec <- filter(航班,% c(11,12)月%)

当我阅读“x %in% y是解决这个问题的一个有用的缩写”,然后查看nov_dec示例时,它似乎被理解为“选择每个行,其中月份(x)是c(11,12) (y)中的值之一”,这对我来说是没有意义的。

然而,我的大脑想把它读成“在月份专栏中查找1112”之类的内容。在这个例子中,x应该是1112的值,%in%操作符正在检查这些值是否在y中,后者将是月份列。我的大脑正在从右到左阅读这个例子。

但是,我发现的所有代码示例似乎都表明,%y中的x%应该从左读到右,而不是从右读到左。

有人能帮我读一下%in%操作符吗?请用外行的术语。请举例说明。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-24 23:04:58

我认为你的脱节是理解如何将"in“应用于向量。你写道,你想把它读成“在月份专栏中查找11和12”。你真的可以这样想。你的例子是:

代码语言:javascript
复制
nov_dec <- filter(flights, month %in% c(11, 12))

这可以用通俗易懂的英语表达为:

告诉我c(11, 12)中的值之一在月份列中的所有航班

但我们也可以说,11和12是“在”向量c(11, 12)。这就是从左到右的读数:

告诉我每个月的航班都是矢量c(11, 12)

或者,用稍微不同的表达方式和更详细的表达:

给我所有的航班,它的月份等于向量c(11, 12)中的一个值。

这在概念上类似于使用一行|操作符(month == 11 | month == 12),但最好不要认为它们完全等价。您不是将xy中的每个值显式比较,而是问“x是否等于y中的一个值?”这和说“请关掉灯”和说“请走到墙上的盘子上,把小木棍往下拉”是不同的。它表达的是您想要的,而不是如何解决它,这使您的代码更加可读性,代码读取比它编写的更多,所以这是很重要的!

现在我已经走出了我的领域--同样,我不知道R在这里到底做了什么--但是回答这个问题的基本方法也可能不一样。它可能使用二进制搜索算法来确定x是否在y中。

票数 0
EN

Stack Overflow用户

发布于 2021-04-15 17:41:22

如果我真的想“拼出来”,我会将x %in% y读为“对于每个x值,它在y中吗?”

nov_dec <- filter(航班,% c(11,12)月%)“ 当我阅读“这个问题的有用的缩写是%x%(%)(% y )”,然后看nov_dec示例时,它似乎被理解为“选择每个行,其中月份('x')是c(11,12) ('y')中的一个值,这对我来说没有意义。 然而,我的大脑想把它读成“在月份专栏中寻找11和12”之类的东西。在本例中,“x”应该是11和12的值,%in%运算符正在检查这些值是否在'y‘中,后者将是月份列。我的大脑正在从右到左阅读这个例子。

左派和右派的问题都是关于你在问什么的。x x %in% y在问(用我上面详细的措辞),"for value,是y吗?“有了这个短语,我们知道对TRUEFALSE中的每一个项目都会有一个答案。

如果我们把它再扩展一点,这可能会变得更清楚--两个常见的相关问题是“x值在y中有吗?”以及“所有的x值都在y中”吗?这些代码可以自然地编码为

代码语言:javascript
复制
any(x %in% y)  # Are any x values in y?  
all(x %in% y)  # Are all x values in y?

至少对我来说,这看起来很自然,他们用的是从左到右的阅读。尝试在这里使用从右到左的读数会变得很复杂,比如“在y __中查找x值,您是否用匹配覆盖了每个x值?”

票数 4
EN

Stack Overflow用户

发布于 2021-04-15 17:24:47

这其实是个很好的问题。想一想这里的字面性质:

  • 答案是肯定的吗?
  • 答案是否定的?
  • 答案是是还是不是?
  • 答案是是和不是?

当你使用%in%时,它是代替‘或’语句的--这里有这些语句吗?

代码语言:javascript
复制
answers = data.frame(ans = sample(rep(c("yes","no","maybe"),
                                      each = 3, times = 2)), 
                     ind = 1:9)

# yes or no?
answers[answers$ans == "yes"|answers$ans == "no",]
#    ans ind
# 1  yes   1
# 2  yes   2
# 4   no   4
# 5  yes   5
# 6   no   6
# 8   no   8
# 10 yes   1
# 12  no   3
# 13  no   4
# 16 yes   7
# 17  no   8
# 18 yes   9 

# now about %in%
answers[answers$ans %in% c("yes","no"),]
#    ans ind
# 1  yes   1
# 2  yes   2
# 4   no   4
# 5  yes   5
# 6   no   6
# 8   no   8
# 10 yes   1
# 12  no   3
# 13  no   4
# 16 yes   7
# 17  no   8
# 18 yes   9 


# yes and no?
answers[answers$ans == c("yes","no"),]
#    ans ind
# 1  yes   1
# 4   no   4
# 5  yes   5
# 6   no   6
# 8   no   8
# 12  no   3 

# what happened here? were you expecting that? 
# this checked the first row for yes, 
 # the second row for no, 
  # the third row for yes,
   # the fourth row for no and so on...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67112634

复制
相关文章

相似问题

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