一位朋友写了这个函数来确定向量的唯一成员。我无法弄清楚(精神上)这一行正在做什么,这是该功能的关键。非常感谢任何帮助
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]
任何人都可以向我解释一下吗?
谢谢, 汤姆
答案 0 :(得分:2)
logical
是一个向量,我假设一个逻辑的包含len
个值TRUE
。 x
是一些相同长度的其他数据的向量。
第二部分x != x[i]
正在创建一个带有TRUE
的逻辑向量,其中x
的元素与此迭代的当前x
值相同,和FALSE
否则。
因此,&
的双方现在都是逻辑向量。 &
是按元素进行比较的,如果TRUE
和logical
的元素 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)
给你?如果我通过x
和myUniq()
上方运行我的unique()
,我会获得相同的输出:
> myUniq(x)
[1] "b" "d" "c" "a"
> unique(x)
[1] "b" "c" "d" "a"
(好吧,除了订购......)