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

R 有人能在这个问题的总结部分解释一下他们在做什么吗,r,function,for-loop,vector,R,Function,For Loop,Vector,我在网上看了一些问题,这就是问题所在 创建函数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

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

创建函数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))

代码
v[i]==s
v[i]
s
的所有元素之间执行元素级比较<例如,code>v[i]==s返回类似
TRUE-FALSE
的列表。如果这两者之和大于0,则表示列表中已包含元素
v[i]
。否则它将被追加。

代码
v[i]==s
v[i]
s
的所有元素之间执行元素级比较<例如,code>v[i]==s返回类似
TRUE-FALSE
的列表。如果这两者之和大于0,则表示列表中已包含元素
v[i]
。否则,它将被追加。

sum(v[i]==s)==0
表示
v[i]
不在
s
中的条件。这里,
v[i]==s
产生与
s
相同维度的逻辑向量,因此
sum(v[i]==s)
计算那里的
TRUE
s的数量。如果没有
TRUE
sum(v[i]==s)==0
,则可以输入
If
语句。

sum(v[i]==s)==0
表示
v[i]
不在
s
中的条件。这里,
v[i]==s
产生与
s
相同维度的逻辑向量,因此
sum(v[i]==s)
计算那里的
TRUE
s的数量。如果没有
TRUE
sum(v[i]==s)==0
,则可以输入
If
语句。

某些
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

f.uniq一些
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

把它一块一块地分开可能会有帮助:
v[i]==s
做什么?
sum(v[i]==s)
做什么?
sum(v[i]==s)==0
做什么?向量v中位于i位置的元素在向量s中出现多少次。循环将向量v中的值一个接一个地附加到空向量s,直到找到重复的值为止。我理解
v[I]==s
,我也理解
,但是
==0
我无法理解,你只想附加向量中尚未出现的值。因此,为了附加一个数字,等于当前循环迭代中检查的值的值必须为0。这可能有助于将其逐段分解:v[i]==s
做什么?
sum(v[i]==s)
做什么?
sum(v[i]==s)==0
做什么?向量v中位于i位置的元素在向量s中出现多少次。循环将向量v中的值一个接一个地附加到空向量s,直到找到重复的值为止。我理解
v[I]==s
,我也理解
,但是
==0
我无法理解,你只想附加向量中尚未出现的值。因此,为了附加一个数字,等于当前循环迭代中检查的值的数量值必须为0。请注意,
any(v[i]==s)
是表达相同概念的更简洁的方法。请注意,
any(v[i]==s)可能会有所帮助
是一种更简洁的表达相同概念的方式欢迎来到stack overflow并感谢您的回答。请随意添加一些输出结果,以准确显示您的意思。例如,在原始帖子的示例中从来没有
TRUE-FALSE
。请随意添加一些输出结果,以准确显示您的意思。例如,在原始帖子的示例中,从来没有
TRUE-FALSE