2016-03-16 8 views
0

Я пытаюсь понять (мне) неожиданное поведение цепочки SEQ и сортировки:R: Цепная 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 делать это, просто привязывая их к функциям. Зачем?

ответ

0

Если вы пытаетесь передать аргументы функции в качестве вектора, вы можете использовать do.call(). Он позволяет выполнить вызов функции с помощью функции , имя и список своих аргументов.

do.call(seq, as.list(sort(c(5,1)))) # vector needs to be converted to a list 
#[1] 1 2 3 4 5 

Ваш пример возвращает [1] 1 2, потому что всякий раз, когда мы проходим seq вектор длины > 1, он будет действовать как seq_along. Другими словами, будет создана последовательность с длиной, равной количеству элементов в векторе.