【问题标题】:How to use lapply to specific indices of a list?如何将 lapply 用于列表的特定索引?
【发布时间】:2014-11-20 14:00:06
【问题描述】:

当使用lapply 将函数应用于列表时,我将如何对列表中的其他四个元素执行此操作?

例如,如果我有长度为 100 的 list,我将如何将我的函数应用于 list[1]list[5]list[9]list[13] 等等?

【问题讨论】:

    标签: r list function indexing lapply


    【解决方案1】:

    在您感兴趣的子集上使用lapply

    > l <- as.list(1:15)
    > lapply(l[seq(1,length(l),by=4)], identity)
    [[1]]
    [1] 1
    
    [[2]]
    [1] 5
    
    [[3]]
    [1] 9
    
    [[4]]
    [1] 13
    

    或者,如果您想替换原始列表中的值:

    s <- seq(1,length(l),by=4)
    l[s] <- lapply(l[s], function(x) x*2)
    

    【讨论】:

      【解决方案2】:

      或使用(使用@Joshua Ulrich 的数据)

      s1 <- (seq_along(l)-1)%%4+1==1
      l[s1]
      #  [[1]]
      #[1] 1
      
      #[[2]]
      #[1] 5
      
      #[[3]]
      #[1] 9
      
      #[[4]]
      #[1] 13
      

      或者

      s2 <- c(TRUE, rep(FALSE,3)) # The logical index will recycle to the length of `l`
      

      它的作用类似于以下:

      rep(s2, length.out=length(l))
      # [1]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
      #[13]  TRUE FALSE FALSE
      
      
      l[s2]
      #  [[1]]
      #[1] 1
      
      #[[2]]
      #[1] 5
      
      #[[3]]
      #[1] 9
      
      #[[4]]
      #[1] 13
      

      然后使用lapply

      【讨论】:

      • 您应该解释为什么您的第二个建议有效,因为大多数用户可能不会立即明白这一点。
      • @Joshua Ulrich 感谢您的评论。我更新了一些解释。
      猜你喜欢
      • 2016-06-21
      • 1970-01-01
      • 2021-07-02
      • 2022-01-21
      • 2019-02-01
      • 2022-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多