【发布时间】:2014-03-21 12:10:11
【问题描述】:
我应用一个简单的匿名函数在序列 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
【问题讨论】:
-
也许我没有得到你的问题,但结果似乎符合我的预期,因为 + (和你的函数)在整个 x 向量上运行。为了得到你想要的东西: unlist(lapply(1:5, function(x) c(x, x+5)))
-
@vodka:太好了,请发帖作为答案。 a)这是否有效地矢量化?如果没有,还不如写一个for循环b)是否没有(矢量化)方法来确保优先顺序是先将函数应用于单个args,然后将子结果连接起来?
-
详细说明,当输入
x是1:5时,它与1:5+5连接,所以你的输出是c(1:5,6:10)。这是操作顺序的问题。 -
@Carl-Witthoft,是的,我已经根据伏特加的评论将其标记为 [tag:]operator-precedence。但我希望能够在这里控制优先顺序。
标签: r function sorting vectorization operator-precedence