从嵌套列表中删除包含特定字符串的项目

时间:2019-02-02 21:23:43

标签: r list null nested subset

我想删除包含字符串available的R列表的嵌套项目。但是,我需要保持列表大小(即NULL,如果所有项目都已删除)。下面的代码生成一个可能的输入,应从中删除所有项目:

nested.list <- list()
for(lop in 1:4){
nested.list[[lop]] <- c("available","available")}

预期输出为:

for(lop in 1:4){
nested.list.out[lop] <- list(NULL)} 

但是,如果该项目不是available,则应保留该项目。让我们假设以下输入:

nested.list[[1]][[2]] <- "hold" 

预期输出为:

nested.list.out[[1]] <- "hold"

重要的是要突出显示字符串hold仅作为示例。在我的实际数据集中,每个嵌套列表的每个项目都可以具有随机字符串,并且应该全部保留在我的输出中。有什么明智的想法吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用lapply遍历列表。在每次迭代中,删除所有available字符串,如果结果向量为空,则返回NULL

nested.list.out <- lapply(nested.list, function(x) {
    x <- x[x != "available"]  # Remove "available" from vector
    if (length(x) < 1){
        # Here resulting vector is empty, so return NULL
        return(NULL)
    } else {
        return(x)
    }
})