我有一个很大的字节序列,我想生成一个包含该序列的任意数量子集的列表。我怀疑我需要使用其中一个应用函数,但诀窍是我需要遍历起始位置的向量,不序列本身。
以下是我希望它如何运作的示例 -
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中循环。
谢谢!
答案 0 :(得分:0)
通过预先计算模选选择索引来节省一些时间:
> 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函数比等效循环更快是不正确的。)