序列长度(x)是否总是比R中的1:x快?一个比另一个更受欢迎吗?
这个问题不言自明。但是在R中有多个函数做同样的事情肯定是有原因的 在循环中,序列长度(x)是否总是比R中的1:x快?一个比另一个更受欢迎吗?,r,R,这个问题不言自明。但是在R中有多个函数做同样的事情肯定是有原因的 在循环中,seq_len()或:中的一个在速度方面更受欢迎吗 在我看来,文档并不能说明全部情况。首先请注意,seq_len(x)显然比seq()更有限:前者生成从1到x的向量,而后者允许任意开始、结束和增量 如果 x <- numeric(0) y <- length(x) 但是 因此,在处理数组时,前者可能是一个问题 最后,seq_len()比seq()快。正如对您问题的评论中所建议的,这可以从一个简单的基准中看出
seq_len()
或:
中的一个在速度方面更受欢迎吗
在我看来,文档并不能说明全部情况。首先请注意,
seq_len(x)
显然比seq()
更有限:前者生成从1到x的向量,而后者允许任意开始、结束和增量
如果
x <- numeric(0)
y <- length(x)
但是
因此,在处理数组时,前者可能是一个问题
最后,seq_len()
比seq()
快。正如对您问题的评论中所建议的,这可以从一个简单的基准中看出:
benchmark(seq(1,10^7),seq_len(10^7))
test replications elapsed relative user.self sys.self user.child
2 seq_len(10^7) 100 1.880 1.000 0.992 0.801
1 seq(1, 10^7) 100 2.645 1.407 1.094 0.940
您可以自己使用
microbenchmark::microbenchmark()
。从中,a:b
相当于seq(From=a,to=b)
。不太清楚序列
。请将其输出与x@Phil进行比较,谢谢。使用microbenchmark(),对于[1:1000]中的1000个连续元素序列,seq_len的速度稍微慢一些。@JarrettPhillips常见的一个问题是(1:n中的i)的,其中i
可以变为零。
seq_len(y)
integer(0)
benchmark(seq(1,10^7),seq_len(10^7))
test replications elapsed relative user.self sys.self user.child
2 seq_len(10^7) 100 1.880 1.000 0.992 0.801
1 seq(1, 10^7) 100 2.645 1.407 1.094 0.940