【发布时间】:2014-11-20 14:00:06
【问题描述】:
当使用lapply 将函数应用于列表时,我将如何对列表中的其他四个元素执行此操作?
例如,如果我有长度为 100 的 list,我将如何将我的函数应用于 list[1]、list[5]、list[9]、list[13] 等等?
【问题讨论】:
标签: r list function indexing lapply
当使用lapply 将函数应用于列表时,我将如何对列表中的其他四个元素执行此操作?
例如,如果我有长度为 100 的 list,我将如何将我的函数应用于 list[1]、list[5]、list[9]、list[13] 等等?
【问题讨论】:
标签: r list function indexing lapply
在您感兴趣的子集上使用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)
【讨论】:
或使用(使用@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
【讨论】: