r-有人能在这个问题的总结部分解释一下他们在做什么吗



在网上看了一些问题,这就是的问题

创建函数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] == sv[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

相关内容

最新更新