R,将数字输入转换为以上限为边界的循环数字输出的函数

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

我如何编写一个函数f(v, n)(或使用基数R函数),该函数将数字矢量v转换为另一个基于n的循环因子(缺少更好的单词)。例如:

f(v = c(1,2,3,4,5), n = 1) #would yield c(1,2,3,4,5)
f(v = c(1,2,3,4,5), n = 2) #would yield c(1,2,1,2,1)
f(v = c(1,2,3,4,5), n = 3) #would yield c(1,2,3,1,2)
f(v = c(5,4,3,2,1), n = 3) #would yield c(2,1,3,2,1)
f(v = c(3,6), n = 3) #would yield c(3,3)

我最近得到的是使用%%

1:5%%3 #giving me: [1] 1 2 0 1 2 - not quite what I want, at least some recycling.
r vector numeric recycle
1个回答
1
投票

我们可以将函数创建为

f <- function(x, n) if(n ==1) x else (x - 1) %% n + 1
f(1:5, 1)
#[1] 1 2 3 4 5
f(1:5, 2)
#[1] 1 2 1 2 1

f(1:5, 3)
#[1] 1 2 3 1 2

f(5:1, 3)
#[1] 2 1 3 2 1
© www.soinside.com 2019 - 2024. All rights reserved.