x < - c(22,33,45)
erase&lt; - function(x,value){
x [!x%in%value]
}
擦除(x,45)
它打印输出为22,33
有人可以描述这段代码如何从向量x中删除45吗?
假设向量x&lt; -c(33,22,45)
在函数体的早期代码中,取索引x并在索引内部不保持与x匹配的值。如果说值为45并且它从索引内部的x中移除,则在索引的外部,即x []如何恢复33和22并产生输出33 22,因为它是索引值。我对这个函数有点困惑,实际上它将索引1和2保持为33和22。
为什么不返回x [33,22],它提供了NA值,但实际上它采用了像x [1,2]这样的值,不包括第三个索引位置的33。
可能是我没弄错。任何人都可以详细说明代码如何生成33和22作为输出?
****此代码适用于R编程语言。
答案 0 :(得分:2)
请参阅?'%in%'
。
向量x %in% 45
检查x
的每个元素是否在45
中,如果是,则记录TRUE
,否则为FALSE
(自45
以来}是单个值,这与x == 45
)相同。
所以x %in% 45 == c(FALSE, FALSE, TRUE)
然后!
运算符会反转逻辑值,所以
! x %in% 45 == c(TRUE, TRUE, FALSE)
通过在[]
中输入逻辑向量进行子集化时,将删除其索引对应于逻辑向量中的值FALSE
的向量的值。在这种情况下,只有45
有一个索引(3),其逻辑向量中的值为FALSE
,因此将被删除。