代码之家  ›  专栏  ›  技术社区  ›  ViSa

如何根据r中可被整数整除的索引从列表中筛选元素?

r
  •  0
  • ViSa  · 技术社区  · 5 年前

    根据可被6整除的索引从列表中选择元素

    mypics "b1.jpg", "b2.jpg", "b3.jpg", "b4.jpg", "b5.jpg", "b6.jpg", "c1.jpg", "c2.jpg", "c3.jpg", "c4.jpg", "c5.jpg", "c6.jpg", "p1.jpg", "p2.jpg", "p3.jpg", "p4.jpg", "p5.jpg", "p6.jpg"

    现在我想选择除可被6整除的元素之外的所有元素,我尝试了下面的代码,但它不起作用。

    mypics[for (i in 1:length(mypics) ) {(!i %% 6 == 0){return (i)}} ]
    

    鉴于以下部分测试规范有效:

    for (i in 1:length(mypics)){
      if (! i %% 6 == 0) {
      print(i)
      }
    } 
    
    ################# output #################
    [1] 1
    [1] 2
    [1] 3
    [1] 4
    [1] 5
    [1] 7
    [1] 8
    [1] 9
    [1] 10
    [1] 11
    [1] 13
    [1] 14
    [1] 15
    [1] 16
    [1] 17
    

    我不确定我是不是没有正确地退回或是其他什么东西。

    2 回复  |  直到 5 年前
        1
  •  0
  •   Ronak Shah    5 年前

    这里不需要循环。尝试:

    mypics <- mypics[seq_along(mypics) %% 6 != 0]
    

    mypics <- mypics[c(rep(TRUE, 5), FALSE)]
    
        2
  •  1
  •   Karthik S    5 年前

    这样做是否有效:使用readr包的parse_number函数:

    library(readr)
    mypics <- list(b1.jpg = "b1.jpg", b2.jpg="b2.jpg", b3.jpg="b3.jpg", b4.jpg="b4.jpg", b5.jpg="b5.jpg", b6.jpg="b6.jpg", c1.jpg="c1.jpg",c2.jpg= "c2.jpg",c3.jpg= "c3.jpg", 
                   c4.jpg="c4.jpg", c5.jpg="c5.jpg", c6.jpg="c6.jpg", p1.jpg="p1.jpg", p2.jpg="p2.jpg", p3.jpg="p3.jpg", p4.jpg="p4.jpg", p5.jpg="p5.jpg", p6.jpg="p6.jpg")
    names(mypics)[parse_number(names(mypics))%%6 !=0]
     [1] "b1.jpg" "b2.jpg" "b3.jpg" "b4.jpg" "b5.jpg" "c1.jpg" "c2.jpg" "c3.jpg" "c4.jpg" "c5.jpg" "p1.jpg" "p2.jpg" "p3.jpg" "p4.jpg" "p5.jpg"