始终从向量中获取 n 个元素,如果向量长度 <n,则再次循环向量

Dan*_*Cee 5 element r vector

假设我有一组不同长度的向量。

我想始终获取其中的前 9 个元素。

但是,如果向量长度<9,我想获取所有元素,并从一开始就再次(一次又一次......必要时)完成最多 9 个向量。

例如:

v1=LETTERS[1:15]-> 我想抢"A" "B" "C" "D" "E" "F" "G" "H" "I"

v2=LETTERS[1:5]-> 我想抢"A" "B" "C" "D" "E" "A" "B" "C" "D"

v3=LETTERS[1:3]-> 我想抢"A" "B" "C" "A" "B" "C" "A" "B" "C"

... 等等。

有没有一种简单的方法可以做到这一点而无需遍历循环和异常?

Mar*_*ark 11

您可以使用该rep_len()功能:

> rep_len(LETTERS[1:15], 9)
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I"
> rep_len(LETTERS[1:5], 9)
[1] "A" "B" "C" "D" "E" "A" "B" "C" "D"
> rep_len(LETTERS[1:3], 9)
[1] "A" "B" "C" "A" "B" "C" "A" "B" "C"
Run Code Online (Sandbox Code Playgroud)

或者,还有带有参数rep()的函数length.out,它会给你相同的结果,但rep()比rep_len().

您可以在此处阅读文档。


Tho*_*ing 7

我认为rep@Mark 的方法是解决你的问题最直接、最有效的方法。

如果您对编码实践感兴趣,可以尝试定义如下函数

f <- function(v, n) {
    v[(seq(n) - 1) %% length(v) + 1]
}
Run Code Online (Sandbox Code Playgroud)

这样

> f(LETTERS[1:9], 9)
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I"

> f(LETTERS[1:5], 9)
[1] "A" "B" "C" "D" "E" "A" "B" "C" "D"

> f(LETTERS[1:3], 9)
[1] "A" "B" "C" "A" "B" "C" "A" "B" "C"
Run Code Online (Sandbox Code Playgroud)