矢量连接函数结果的不需要的排序行为

时间:2014-03-21 12:10:11

标签: r function sorting vectorization operator-precedence

我应用一个简单的匿名函数来返回序列1:5上的c(x,x + 5)

我期望看到c(1,6,2,7,3,8,4,9,5,10)(子结果的连接),但结果向量被不必要地排序。这是做什么的,我该如何预防?

> (function(x) c(x,x+5)) (1:5)
 [1]  1  2  3  4  5  6  7  8  9 10

然而,对每个单独的参数应用函数是正确的:

> (function(x) c(x,x+5)) (1)
[1] 1 6
> (function(x) c(x,x+5)) (2)
[1] 2 7
...
> (function(x) c(x,x+5)) (5)
[1]  5 10

3 个答案:

答案 0 :(得分:2)

另一种方法:

bar <- function(x) {
    as.vector(matrix(c(x,x+5),nrow=2,byrow=TRUE))
}

答案 1 :(得分:2)

这样就可以了:

   unlist(lapply(1:5, function(x) c(x, x+5)))

答案 2 :(得分:1)

您可以尝试这样来欺骗操作顺序:

foo<-function(x) {   
      bar<-cbind(x,x+5)  
      as.vector(t(bar))

}
foo(1:5)

或以一行形式:

(function(x) as.vector(t(cbind(x,x+5)))) (1:5)