R编程中如何通过索引删除嵌套列表内向量的指定元素
R实现嵌套列表内向量的指定索引删除
正确实现代码
首先定义原始数据结构:
mydict <- list(data_point = list("sample1" = c(1000,2), "sample2"= c(200,300)))
固定删除sample1对应向量第1个元素的写法:
mydict[["data_point"]][["sample1"]] <- mydict[["data_point"]][["sample1"]][-1]
执行后即可得到预期输出:list(data_point = list("sample1" = c(2), "sample2"= c(200,300)))
适配for循环动态索引写法
如果索引、操作对象都是循环中动态获取的,可以用变量替换硬编码的键名和索引:
# 以下变量均可在for循环中动态赋值 target_first_key <- "data_point" target_sample <- "sample1" delete_index <- 1 # 执行删除 mydict[[target_first_key]][[target_sample]] <- mydict[[target_first_key]][[target_sample]][-delete_index]
如果需要对标Python pop 方法同时返回被删除的元素,增加一行取值即可:
pop_value <- mydict[[target_first_key]][[target_sample]][delete_index] mydict[[target_first_key]][[target_sample]] <- mydict[[target_first_key]][[target_sample]][-delete_index]
之前写法错误原因
mydict[[data_point]][1] <- NULL- 键名
data_point未加引号,R会将其识别为变量而非字符串类型的键,找不到对应变量就会报错 - 直接给向量的单个位置赋值
NULL会触发向量结构重排,容易出现索引错位问题,不推荐使用
- 键名
mydict[[data_point]] <- mydict[[data_point]][-1]- 同样存在
data_point未加引号的问题 - 写法逻辑是删除
data_point下的第一个元素(直接删掉整个sample1),而非删除sample1内部向量的第一个元素,操作层级错误
- 同样存在
内容的提问来源于stack exchange,提问作者Aks
相关产品推荐
相关产品推荐

