Ana*_*bus 6 indexing r built-in mod
目前,我有
extract_modulo = function(x, n, fn=`[`) fn(x, (n-1L) %% length(x) + 1L)
`%[mod%` = function (x, n) extract_modulo(x, n)
Run Code Online (Sandbox Code Playgroud)
然后:
seq(12) %[mod% 14
#[1] 2
Run Code Online (Sandbox Code Playgroud)
这已经在某个地方内置了吗?我会这么认为,因为R有几个回收价值的功能(例如paste
).但是,我不跟结果一无所获help('[[')
,??index
或??mod
.我认为这样的R符号可能是seq(12)[/14/]
或类似的as.list(seq(12))[[/14/]]
.
rep_len()
是一个快速.Internal
函数,适合这种用途或在您自己的函数中回收参数时。对于这种特殊情况,当您在超出向量长度的索引位置查找值时,rep_len(x, n)[n]
对于任何非负整数 'n' 和任何非 ,将始终执行您正在查找的操作NULL
x
。
rep_len(seq(12), 14)[14]
# [1] 2
rep_len(letters, 125)[125]
# [1] "u"
Run Code Online (Sandbox Code Playgroud)
如果结果证明您不需要回收,那么它在值小于的情况x
下也可以正常工作n
length(x)
rep_len(seq(12), 5)[5]
# [1] 5
rep_len(seq(12), 0)[0]
# integer(0)
# as would be expected, there is nothing there
Run Code Online (Sandbox Code Playgroud)
如果您愿意,您当然可以创建一个包装器:
recycle_index <- function(x, n) rep_len(x, n)[n]
recycle_index(seq(12), 14)
# [1] 2
Run Code Online (Sandbox Code Playgroud)