使用冒号运算符生成时,为什么这些序列会反转?

时间:2014-11-13 18:37:59

标签: r

我注意到当我尝试使用:运算符(没有匿名函数)生成序列列表时,序列总是反转的。以下面的例子为例。

x <- c(4, 6, 3)
lapply(x, ":", from = 1)
# [[1]]
# [1] 4 3 2 1
#
# [[2]]
# [1] 6 5 4 3 2 1
#
# [[3]]
# [1] 3 2 1

但是当我使用seq时,一切都很好。

lapply(x, seq, from = 1)
# [[1]]
# [1] 1 2 3 4
#
# [[2]]
# [1] 1 2 3 4 5 6
#
# [[3]]
# [1] 1 2 3

来自help(":"),声明

  

对于其他参数from:to相当于seq(from, to),并以1或-1的步长生成从fromto的序列。

为什么第一个序列列表会反转?

我可以使用lapply的冒号运算符以这种方式生成正向序列吗? 或者我是否总是必须使用lapply(x, function(y) 1:y)

1 个答案:

答案 0 :(得分:9)

“:”运算符在C中实现为原始do_colon函数。此原始函数没有命名参数。它只是将第一个参数作为“from”,将第二个参数作为“to”来取消任何参数名称。参见

`:`(to=10, from=5)
# [1] 10  9  8  7  6  5

此外,lapply函数仅将其值作为函数调用中的前导未命名参数传递。您不能通过lapply作为第二个位置参数将值传递给基本函数。