[英]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] == s
在v[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 的數量。 如果沒有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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.