代码之家  ›  专栏  ›  技术社区  ›  ℕʘʘḆḽḘ

过滤掉purr中最长的字符串

  •  2
  • ℕʘʘḆḽḘ  · 技术社区  · 6 年前

    考虑这个例子

    list('test', 'one')

    我想将这个列表子集,并且只保留列表中最长的字符串。使用 purrr::keep 似乎不起作用。

    > list('test', 'one') %>% keep(~ nchar(.x) == max(nchar(.)))
    [[1]]
    [1] "test"
    
    [[2]]
    [1] "one"
    

    有什么想法吗? 谢谢!

    2 回复  |  直到 6 年前
        1
  •  1
  •   Julius Vainora    6 年前

    如果 l 是存储的,那么事实上,基R似乎是最好的:

    l <- list('test', 'one')
    
    # If you want only the first one or there is a unique element
    l[which.max(nchar(l))]
    # [[1]]
    # [1] "test"
    
    # General
    l[nchar(l) == max(nchar(l))]
    # [[1]]
    # [1] "test"
    

    现在用 keep 我们可以这样做

    list('test', 'one') %>% keep(function(x) nchar(x) == max(nchar(.)))
    # [[1]]
    # [1] "test"
    

    问题似乎是两者都有 . .x 只是列表中的单个元素 ~ nchar(.x) == max(nchar(.)) .

        2
  •  0
  •   YOLO    6 年前

    你可以做简单的:

    k <- list('test', 'one')
    k[which.max(lapply(k, nchar))]
    
    [[1]]
    [1] "test"