代码
在网上看了一些问题,这就是的问题
创建函数unique,该函数给定一个向量将返回一个新向量,其中第一个向量的元素已删除重复元素。
我看了一下解决方案,这就是他们的
f.uniq <- function (v) {
s <- c()
for(i in 1:length(v)) {
if(sum(v[i] == s) == 0) {
s <- c(s, v[i])
}
}
s
}
f.uniq(c(9, 9, 1, 1, 1, 0))
如果有人能解释这里发生了什么
if(sum(v[i] == s) == 0)
sum(v[i] == s) == 0
表示v[i]
不在s
中的条件。这里,v[i] == s
产生与s
相同维度的逻辑向量,因此sum(v[i] == s)
对那里的TRUE
的数量进行计数。如果没有TRUE
,即sum(v[i] == s) == 0
,则可以输入if
语句。
v[i] == s
在v[i]
和s
的所有元素之间执行元素比较。例如,CCD_ 14返回类似于CCD_ 15的列表。如果其和大于0,则这意味着元素v[i]
已经包含在列表中。否则,它将被附加。
某些cat
在这种情况下可能有用
f.uniq <- function (v) {
s <- c()
for(i in 1:length(v)) {
cat("ni=",i,"nv[i] ==s :", v[i] == s,"nsum(v[i] == s):",sum(v[i] == s),"n")
if(sum(v[i] == s) == 0) {
s <- c(s, v[i])
}
}
s
}
## > f.uniq(c(9, 9, 1, 1, 1, 0))
## i= 1
## v[i] ==s :
## sum(v[i] == s): 0
## i= 2
## v[i] ==s : TRUE
## sum(v[i] == s): 1
## i= 3
## v[i] ==s : FALSE
## sum(v[i] == s): 0
## i= 4
## v[i] ==s : FALSE TRUE
## sum(v[i] == s): 1
## i= 5
## v[i] ==s : FALSE TRUE
## sum(v[i] == s): 1
## i= 6
## v[i] ==s : FALSE FALSE
## sum(v[i] == s): 0
## [1] 9 1 0