You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言实现元素首次出现识别:重复出现则返回FALSE的算法求助

R语言判断元素首次出现的实现方案

问题说明

需求:对向量的每个位置,若元素为首次出现返回TRUE,此前已出现过返回FALSE
测试用例:

  • 输入x1 = c("LMP","Dp","LMP","LMP","Dp"),预期输出:TRUE, TRUE, FALSE, FALSE, FALSE
  • 输入x2 = c("Dp","Dp","LMP","LMP","Dp"),预期输出:TRUE, FALSE, TRUE, FALSE, FALSE

原有代码问题分析

原有代码的判断逻辑length(unique(x[1:i]))==1仅能识别前i个元素是否全为同一个值,无法判断当前位置元素是否在之前的位置单独出现过,因此结果不符合预期。

正确实现方案

方案1:调用R内置函数(性能最优)

直接使用!duplicated(x)即可实现需求,duplicated()函数会返回布尔向量,标记对应位置的元素是否在之前出现过,取反后刚好符合首次出现返回TRUE的要求。

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

# 测试x1
!duplicated(x1)
# 输出:TRUE  TRUE FALSE FALSE FALSE

# 测试x2
!duplicated(x2)
# 输出:TRUE FALSE  TRUE FALSE FALSE

方案2:自定义循环实现(手动实现逻辑)

如果需要手写核心判断逻辑,可以用以下代码:

check_first_occur <- function(x) {
  # 初始化等长结果向量
  res <- logical(length(x))
  # 存储已经出现过的元素
  seen_items <- c()
  for (i in seq_along(x)) {
    res[i] <- !x[i] %in% seen_items
    seen_items <- c(seen_items, x[i])
  }
  return(res)
}

# 测试
check_first_occur(x1)
check_first_occur(x2)

内容的提问来源于stack exchange,提问作者MatCordTo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:15:04