【问题标题】:R - list of list - select id of unempty listR - 列表列表 - 选择非空列表的 id
【发布时间】:2018-03-30 14:08:38
【问题描述】:

我尝试在 R 中进行一些搜索和数据分析。我有这样的代码:

data = matrix( 
  c(3, 21, 80, 208,
    3, 49, 80, 1298,
    5, 17, 80, 302,
    8, 28, 80, 2857,
    13, 08, 80, 2860,
    14, 08, 80, 2860,
    15, 58, 80, 208,
    15, 58, 80, 463,
    15, 58, 80, 2065,
    15, 58, 80, 2065,
    13, 05, 80, 608,
    13, 08, 80, 608
     ), 

  nrow=12,             
  ncol=4,              
  byrow = TRUE)        

#find a match with numbers 13 and 8 in column 1
require(AhoCorasickTrie)
keywords = c("13","8 ")
SearchNew = AhoCorasickSearch(keywords,data[,1])

SearchNew 看起来像这样:

> SearchNew
[[1]]
list()

[[2]]
list()

[[3]]
list()

[[4]]
list()

[[5]]
[[5]][[1]]
[[5]][[1]]$Keyword
[1] "13"

[[5]][[1]]$Offset
[1] 1

[[6]]
list()

[[7]]
list()

[[8]]
list()

[[9]]
list()

[[10]]
list()

[[11]]
[[11]][[1]]
[[11]][[1]]$Keyword
[1] "13"

[[11]][[1]]$Offset
[1] 1

[[12]]
[[12]][[1]]
[[12]][[1]]$Keyword
[1] "13"

[[12]][[1]]$Offset
[1] 1

我想要的是列表不为空的行的索引。这意味着在这种情况下它将是 5、11、12。我尝试这样做:

xyz <- vector('list', length(SearchNew))
for(i in seq_along(SearchNew)){
  for(j in seq_along(SearchNew[[i]])){
    if (length(SearchNew[[i]]) > 0)
      xyz <- i 
  }
}

但这给了我很多 NULL 行的矩阵。而且我不能只给 xyz 3 行,因为我不知道列表中有很多非空行。我是 R 新手,所以我不知道如何解决这个问题。有什么帮助吗?

【问题讨论】:

    标签: r list for-loop


    【解决方案1】:

    我们可以使用lengths 来查找具有非零length 的元素的索引

    which(lengths(SearchNew)!=0)
    #[1]  5 11 12
    

    如果我们需要对这些元素进行子集化,请使用Filter

    Filter(length, SearchNew)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-04
      • 2018-02-17
      • 2020-02-11
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多