R:链接 seq 和排序产生意外结果
R: Chaining seq and sort yields unexpected result
我正在尝试了解链接 seq 和排序的(对我而言)意外行为:
> seq(sort(c(5,1)))
[1] 1 2
> sort(c(5,1))
[1] 1 5
> seq(1,5)
[1] 1 2 3 4 5
> seq(c(sort(c(5,1))))
[1] 1 2
我希望第一行产生一个从 1 到 5 的序列,因为这是我想要得到的,但我不能让 R 仅仅通过将这些链接到函数来做到这一点。为什么?
如果您尝试将参数作为向量传递给函数,您可以使用 do.call()
。它允许您使用函数 name 及其参数的 list 执行函数调用。
do.call(seq, as.list(sort(c(5,1)))) # vector needs to be converted to a list
#[1] 1 2 3 4 5
您的示例 returns [1] 1 2
,因为每当我们传递 seq
一个长度为 > 1
的向量时,它将充当 seq_along
。换句话说,将创建一个长度等于向量中元素数的序列。
我正在尝试了解链接 seq 和排序的(对我而言)意外行为:
> seq(sort(c(5,1)))
[1] 1 2
> sort(c(5,1))
[1] 1 5
> seq(1,5)
[1] 1 2 3 4 5
> seq(c(sort(c(5,1))))
[1] 1 2
我希望第一行产生一个从 1 到 5 的序列,因为这是我想要得到的,但我不能让 R 仅仅通过将这些链接到函数来做到这一点。为什么?
如果您尝试将参数作为向量传递给函数,您可以使用 do.call()
。它允许您使用函数 name 及其参数的 list 执行函数调用。
do.call(seq, as.list(sort(c(5,1)))) # vector needs to be converted to a list
#[1] 1 2 3 4 5
您的示例 returns [1] 1 2
,因为每当我们传递 seq
一个长度为 > 1
的向量时,它将充当 seq_along
。换句话说,将创建一个长度等于向量中元素数的序列。