我有一个很大的字节序列,我想生成一个包含该序列的任意数量的子集的列表。我怀疑我需要使用apply函数之一,但是诀窍在于我需要遍历起始位置的向量,而不是序列本身。
这是我希望它如何工作的示例-
extrct_by_mod <- function(x, startpos, endpos, lrecl)
{
x[1:length(x) %% lrecl %in% startpos:endpos]
}
tmp_seq <- letters[1:25]
startpos <- c(0, 2)
endpos <- c(1, 5)
lrecl <- 5
list_one <- extrct_by_mod(x=tmp_seq, startpos=startpos[1], endpos=endpos[1], lrecl=lrecl)
list_two <- extrct_by_mod(x=tmp_seq, startpos=startpos[2], endpos=endpos[2], lrecl=lrecl)
what_i_want <- list(list_one, list_two)
理想情况下,我希望能够仅向startpos和endpos添加更多值,从而自动生成更多子集以添加到我的列表中。请注意,这些子集的长度将不同,在某些情况下甚至不会具有相同的类型。
我的数据集相当大,因此可以很好地进行扩展。我意识到这可以通过循环来完成,但是我了解到您通常希望避免在R中循环。
谢谢!
通过预先计算模选择索引来节省一些时间:
> cats <- 1:length(tmp_seq) %% lrecl
> mapply(function(start,end) { tmp_seq[cats %in% start:end]} , startpos, endpos)
[[1]]
[1] "a" "e" "f" "j" "k" "o" "p" "t" "u" "y"
[[2]]
[1] "b" "c" "d" "g" "h" "i" "l" "m" "n" "q" "r" "s" "v" "w" "x"
(R apply函数的速度比等效循环快是不正确的。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句