假设我有一组不同长度的向量。
我想始终获取其中的前 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().
您可以在此处阅读文档。
我认为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)