使用常量(自然数)展开数字向量元素

use*_*672 3 integer r vector

给定一个向量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)

tal*_*lat 5

另一种方法是

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)