我注意到当我尝试使用:
运算符(没有匿名函数)生成序列列表时,序列总是反转的。以下面的例子为例。
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的步长生成从from
到to
的序列。
为什么第一个序列列表会反转?
我可以使用lapply
的冒号运算符以这种方式生成正向序列吗?
或者我是否总是必须使用lapply(x, function(y) 1:y)
?
答案 0 :(得分:9)
“:”运算符在C中实现为原始do_colon函数。此原始函数没有命名参数。它只是将第一个参数作为“from”,将第二个参数作为“to”来取消任何参数名称。参见
`:`(to=10, from=5)
# [1] 10 9 8 7 6 5
此外,lapply
函数仅将其值作为函数调用中的前导未命名参数传递。您不能通过lapply
作为第二个位置参数将值传递给基本函数。