【问题标题】:Algorithm that returns false If the result has already come out before in R如果结果之前已经在 R 中出现,则返回 false 的算法
【发布时间】:2021-12-30 12:28:42
【问题描述】:

如果结果之前已经出来,我想做一个返回 false 的算法。 下面我附上了我正在使用的代码,但它似乎不是正确的。 如有任何帮助,我将不胜感激。

x1 <- c("LMP","Dp","LMP","LMP","Dp")
x2 <- c("Dp","Dp","LMP","LMP","Dp")


for(i in 1:length(x)){
    if(i==1){TRUE}else{
      if(length(unique(x[1:i]))==1){FALSE}else{TRUE}}}
# The result that i want is 
# for x1:

TRUE, TRUE, FALSE, FALSE, FALSE
# for x2:

TRUE, FALSE, TRUE, FALSE, FALSE

【问题讨论】:

    标签: r algorithm loops


    【解决方案1】:

    使用 duplicated 而不是 for 循环 - duplicated 通过否定 (!)、TRUE -> FALSE 以及反之亦然,为每个重复元素返回 TRUE

    !duplicated(x1)
    [1]  TRUE  TRUE FALSE FALSE FALSE
    !duplicated(x2)
    [1]  TRUE FALSE  TRUE FALSE FALSE
    

    也可以在for 循环中完成。

    f1 <- function(vec) {
    
      un1 <- ""
      out <- logical(length(vec))
      for(i in seq_along(vec)) {
        if(!vec[i] %in% un1) {
           un1 <- c(un1, vec[i])
           out[i] <- TRUE
        }
    
       }
      out
    
    }
    

    -测试

    > f1(x1)
    [1]  TRUE  TRUE FALSE FALSE FALSE
    > f1(x2)
    [1]  TRUE FALSE  TRUE FALSE FALSE
    

    【讨论】:

    • 非常感谢!这就是我要找的!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 2018-10-22
    相关资源
    最近更新 更多