交替,交织或交错两个向量

我想交织相同模式和相等长度的两个向量。 说:

a <- rpois(lambda=3,n=5e5) b <- rpois(lambda=4,n=5e5) 

我想交织或交织这两个向量,创build一个等价的向量c(a[1],b[1],a[2],b[2],...,a[length(a)],b[length(b)])

我的第一个尝试是这样的:

 sapply(X=rep.int(c(3,4),times=5e5),FUN=rpois,n=1) 

但是它要求rpois被称为比需要更多的次数。

到目前为止,我的最佳尝试是将其转化为一个matrix并重新转换成一个vector:

 d <- c(rbind(rpois(lambda=3,n=5e5),rpois(lambda=4,n=5e5))) d <- c(rbind(a,b)) 

有没有更好的方法去做呢? 还是有一个在基地Rfunction完成相同的事情?

你的rbind方法应该运行良好。 你也可以使用

 rpois(lambda=c(3,4),n=1e6) 

因为R会自动将lambda值的向量复制到所需的长度。 速度差别不大:

 library(rbenchmark) benchmark(rpois(1e6,c(3,4)), c(rbind(rpois(5e5,3),rpois(5e5,4)))) # test replications elapsed relative # 2 c(rbind(rpois(5e+05, 3), rpois(5e+05, 4))) 100 23.390 1.112168 # 1 rpois(1e+06, c(3, 4)) 100 21.031 1.000000 

当然, c(rbind(...))方法一般用于构build交替vector,而另一种解决scheme是特定于rpois或其他函数的,它们复制它们的参数那样。

一些速度testing,结合本博尔克的答案:

 > benchmark( + c(rbind(rpois(lambda=3,n=5e5),rpois(lambda=4,n=5e5))), + c(t(sapply(X=list(3,4),FUN=rpois,n=5e5))), + sapply(X=rep.int(c(3,4),times=5e5),FUN=rpois,n=1), + rpois(lambda=c(3,4),n=1e6), + rpois(lambda=rep.int(c(3,4),times=5e5),n=1e6) + ) test 1 c(rbind(rpois(lambda = 3, n = 5e+05), rpois(lambda = 4, n = 5e+05))) 2 c(t(sapply(X = list(3, 4), FUN = rpois, n = 5e+05))) 4 rpois(lambda = c(3, 4), n = 1e+06) 5 rpois(lambda = rep.int(c(3, 4), times = 5e+05), n = 1e+06) 3 sapply(X = rep.int(c(3, 4), times = 5e+05), FUN = rpois, n = 1) replications elapsed relative user.self sys.self user.child sys.child 1 100 6.14 1.000000 5.93 0.15 NA NA 2 100 7.11 1.157980 7.02 0.02 NA NA 4 100 14.09 2.294788 13.61 0.05 NA NA 5 100 14.24 2.319218 13.73 0.21 NA NA 3 100 700.84 114.143322 683.51 0.50 NA NA