我想交织两个相同模式和相同长度的向量.说:
a <- rpois(lambda=3,n=5e5)
b <- rpois(lambda=4,n=5e5)
Run Code Online (Sandbox Code Playgroud)
我想交织或交织这两个向量,以创建一个等价的向量 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)
Run Code Online (Sandbox Code Playgroud)
但它需要rpois被召唤的次数远远超过需要.
到目前为止,我最好的尝试是将其转换为矩阵并重新转换为向量:
d <- c(rbind(rpois(lambda=3,n=5e5),rpois(lambda=4,n=5e5)))
d <- c(rbind(a,b))
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法去做呢?或者在基地有一个功能R完成同样的事情?
Ben*_*ker 15
你的rbind方法应该运作良好.你也可以用
rpois(lambda=c(3,4),n=1e6)
Run Code Online (Sandbox Code Playgroud)
因为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
Run Code Online (Sandbox Code Playgroud)
优雅在旁观者的眼中......当然,该c(rbind(...))方法通常用于构建交替向量,而另一种解决方案特定于rpois以这种方式复制其参数的其他函数.
| 归档时间: |
|
| 查看次数: |
4150 次 |
| 最近记录: |