替换功能

时间:2017-03-12 17:23:34

标签: r function replace

  

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编程语言。

1 个答案:

答案 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,因此将被删除。