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

如何用RStudio的Position()函数识别列表中所有NULL元素的位置

解决R中识别列表所有NULL元素位置的问题

首先,你遇到的for循环错误原因是:list1[i]返回的是原列表第i个元素组成的子列表,而非单个元素。比如list1[2]是[[1]] NULL,此时Position(is.null, list1[2])会返回1(这个子列表的第一个元素是NULL),而非原列表的位置2;非NULL元素的子列表中没有NULL,所以返回NA,最终得到NA 1 NA 1的错误结果。

以下是两种可行的解决方案:

方法1:用which() + sapply()(推荐,简洁高效)

这是最直接的实现方式,先通过sapply()遍历列表每个元素判断是否为NULL,再用which()提取对应的位置:

# 定义你的列表
list1 <- list(0.58, NULL, 0.65, NULL)

# 获取所有NULL元素的位置
null_positions <- which(sapply(list1, is.null))

# 输出结果
null_positions

运行结果:

[1] 2 4

方法2:基于Position()函数实现(若必须使用该函数)

Position()默认只返回第一个匹配项,要获取所有位置,可以循环查找,每次找到后从下一个位置继续搜索,直到没有匹配项为止:

list1 <- list(0.58, NULL, 0.65, NULL)

# 初始化存储位置的向量
null_positions <- c()
current_start <- 1

while(TRUE) {
  # 从current_start位置开始查找第一个NULL
  pos <- Position(is.null, list1, current_start)
  # 如果找不到则退出循环
  if(is.null(pos)) break
  # 记录位置
  null_positions <- c(null_positions, pos)
  # 更新下一次查找的起始位置
  current_start <- pos + 1
}

# 输出结果
null_positions

运行结果同样为:

[1] 2 4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:02:25