簡體   English   中英

有人可以在這個問題的總和部分解釋他們在做什么嗎

[英]Can someone explain what they are doing at the sum part of this question

在網上看一些問題,這就是問題

創建唯一的 function,它給定一個向量將返回一個新向量,其中刪除了第一個向量的元素並刪除了重復元素。

我查看了解決方案,這就是他們所擁有的

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)

代碼v[i] == sv[i]s所有元素之間執行逐元素比較。 例如, v[i] == s返回一個類似TRUE TRUE FALSE的列表。 如果這個和大於 0,這意味着元素v[i]已經包含在列表中。 否則附加。

sum(v[i] == s) == 0表示v[i]不在s中的情況。 這里, v[i] == s產生與s相同維度的邏輯向量,因此sum(v[i] == s)計算TRUE s 的數量。 如果沒有TRUEsum(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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM