无法确定使用&在这个功能

时间:2014-01-08 03:59:10

标签: r function logical-operators

一位朋友写了这个函数来确定向量的唯一成员。我无法弄清楚(精神上)这一行正在做什么,这是该功能的关键。非常感谢任何帮助

myUniq <- function(x){
  len = length(x)                    # getting the length of the argument
  logical = rep(T, len)              # creating a vector of logicals as long as the arg, populating with true
  for(i in 1:len){                   # for i -> length of the argument
    logical = logical & x != x[i]   # logical vector =  logical vector & arg vector where arg vector != x[i] ??????
    logical[i] = T
  }
x[logical]
}

这条线我无法弄清楚:

logical = logical&amp; x!= x [i]

任何人都可以向我解释一下吗?

谢谢, 汤姆

1 个答案:

答案 0 :(得分:2)

logical是一个向量,我假设一个逻辑的包含len个值TRUEx是一些相同长度的其他数据的向量。

第二部分x != x[i]正在创建一个带有TRUE的逻辑向量,其中x的元素与此迭代的当前x值相同,和FALSE否则。

因此,&的双方现在都是逻辑向量。 &是按元素进行比较的,如果TRUElogical的元素 x != x[i],则结果为TRUE否则FALSE。因此,在第一次迭代之后,logical变为TRUE的逻辑向量,所有元素x i=1相同x的元素,如果它们相同,则为FALSE

这是一个例子:

logical <- rep(TRUE, 10)
set.seed(1)
x <- sample(letters[1:4], 10, replace = TRUE)

> x
 [1] "b" "b" "c" "d" "a" "d" "d" "c" "c" "a"
> logical
 [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
> x != x[1]
 [1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
> logical & x != x[1]
 [1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

这看起来非常复杂。你得到的结果如下:

unique(x)

给你?如果我通过xmyUniq()上方运行我的unique(),我会获得相同的输出:

> myUniq(x)
[1] "b" "d" "c" "a"
> unique(x)
[1] "b" "c" "d" "a"

(好吧,除了订购......)