如何用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
相关产品推荐
相关产品推荐

