如果向量长度<n, loop over vector again

问题描述 投票:0回答:2

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

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

但是,如果向量长度为 <9, I want to grab all the elements, and complete up to 9 going over the vector again (and again, and again... where necessary) from the start.

例如:

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"

...等等。

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

r vector element
2个回答
9
投票

您可以使用

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"

或者,还有

rep()
函数,带有
length.out
参数,它会给你相同的结果,但是
rep()
rep_len()
稍微慢一些。

您可以阅读文档这里


6
投票

我认为@Mark

rep方法是解决你的问题最直接、最有效的方法。

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

f <- function(v, n) {
    v[(seq(n) - 1) %% length(v) + 1]
}

这样

> 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"
© www.soinside.com 2019 - 2024. All rights reserved.