序列长度(x)是否总是比R中的1:x快?一个比另一个更受欢迎吗?

序列长度(x)是否总是比R中的1:x快?一个比另一个更受欢迎吗?,r,R,这个问题不言自明。但是在R中有多个函数做同样的事情肯定是有原因的 在循环中,seq_len()或:中的一个在速度方面更受欢迎吗 在我看来,文档并不能说明全部情况。首先请注意,seq_len(x)显然比seq()更有限:前者生成从1到x的向量,而后者允许任意开始、结束和增量 如果 x <- numeric(0) y <- length(x) 但是 因此,在处理数组时,前者可能是一个问题 最后,seq_len()比seq()快。正如对您问题的评论中所建议的,这可以从一个简单的基准中看出

这个问题不言自明。但是在R中有多个函数做同样的事情肯定是有原因的

在循环中,
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