计算一个数字在列表元素中出现的频率

Count the number of how often a number occurs across list elements

假设我有一个包含 5 个向量的列表,其中填充了 1 到 d 之间的整数,其中 d 可以是任何整数

d = 30  #Intergers that I want to count, i.e. 1:30

set_list <- list(s1 = c(2,4,3,1,20,30), s2 = c(3,30,23,1,3,4), 
             s3=c(3,4,5,13,15,12, 23:29, 30), s4 = c(1:10, 13:15, 17),
             s5 = c(15:20, 23))

在不对列表元素 1-5 和整数 1-30 使用双循环的情况下,我想计算从 1 到 d 的每个整数在列表中出现的次数。例如。 1 出现 3 次,2 出现 2 次,3 出现 3 次,依此类推。 请注意,我总是想检查 1 和 d 之间的所有整数,而不仅仅是列表中出现的整数。所以 d 可以比 set_list 中的最大整数大得多,例如 d=50。因此,我不能使用 table 函数。我想出了如何使用 2 个 for 循环来完成它,但我认为这不是最佳解决方案。

您可以使用 vapply 来执行此操作(假设您需要一个整数向量):

vapply(seq_len(d), 
       function(x) {
         sum(x == unlist(set_list))
       }, 
       1L)

purrr::map_int:

purrr::map_int(seq_len(d), ~sum(. == unlist(set_list)))
table(ordered(unlist(set_list), levels = seq_len(d)))[seq_len(d)]