给定一个向量v <- c(1, 10, 22)和一个常数自然数,说明c <- 3如何v在一个大小的窗口中用整数展开c.所以向量将变为w(即1向每边扩展三个整数,整数-2,-1,0,1,2,3,4):
> w
[1] -2 -1 0 1 2 3 4 7 8 9 10 11 12 13 19 20 21 22 23 24 25
Run Code Online (Sandbox Code Playgroud)
另一种方法是
c(t(sapply(-c:c, `+`, v)))
#[1] -2 -1 0 1 2 3 4 7 8 9 10 11 12 13 19 20 21 22 23 24 25
Run Code Online (Sandbox Code Playgroud)
这对于大型v向量更有效,因为sapply循环只迭代-c:c而不是每个元素v.一个简单的比较表明:
set.seed(1)
v <- sample(1e6)
system.time(unlist( Map(`:`, v-c, v+c))) # akrun 1
# User System verstrichen
# 1.518 0.067 1.595
system.time(c(sapply(v, function(x) (x-c):(x+c)))) # akrun 2
# User System verstrichen
# 1.564 0.074 1.652
system.time(c(t(sapply(-c:c, '+', v)))) # docendo
# User System verstrichen
# 0.082 0.024 0.106
system.time(c(mapply(seq, v-c, v+c))) # 989
# User System verstrichen
# 7.132 0.123 7.292
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |