повторная функция в R

Когда я выступаю:

rep(1:4, rep(4,4))

я получил

1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 

что ожидается. Но затем, когда я пытаюсь исправить длину до 16 (это длина вывода) следующим образом:

rep(1:4, rep(4,4), length.out = 16)

я получил

1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4

что странно. Я думаю, что обе эти команды должны выполнять одну и ту же функцию. Может кто-нибудь помочь?

Спасибо!


r rep
person Vinayak Agarwal    schedule 08.08.2012    source источник
comment
Вы читали страницу справки ?rep   -  person GSee    schedule 08.08.2012


Ответы (2)


С 1_

«length.out» может быть задан вместо «times», и в этом случае «x» повторяется столько раз, сколько необходимо для создания вектора этой длины. Если заданы оба, «length.out» имеет приоритет, а «times» игнорируется.

person GSee    schedule 08.08.2012
comment
Но посмотрите на аргумент each, чтобы увидеть, дает ли он желаемый результат. - person Greg Snow; 09.08.2012
comment
Спасибо Gsee. Я не читал всю справочную документацию. Однако меня беспокоило то, что если я укажу rep(1:4, each = 4, length = 20), то я получу 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 1 1 1 1 но я предполагаю, что если each=4 заменить на rep(4,4), то метод печати отличается, хотя и each, и rep() должны выполнять здесь одну и ту же цель. Спасибо! - person Vinayak Agarwal; 09.08.2012
comment
Вам нужно внимательно прочитать ?rep. Что вы подразумеваете под методом print? rep(1:4, each = rep(4,4), length = 20) дает вам предупреждение, которое говорит само за себя (особенно если вы читаете справку!) - person mnel; 09.08.2012

rep(1:4,,rep(4,4),length.out=16) даст результат, который вы ищете. Более простой способ написать это rep(1:4,,16,4).

person minhaj    schedule 09.05.2014
comment
технически правильно, но тьфу! гораздо лучше использовать именованные аргументы, а не заполнители (,,) - person Ben Bolker; 09.05.2014
comment
Я не уверен, что это даже технически правильно. Это работает на экземпляре R на компьютере, на котором я это печатаю (пару лет: 2.15), но я получаю предупреждающее сообщение, которое предполагает, что это произошло случайно (Предупреждение: первый элемент используется в аргументе «каждый»). Кроме того, порядок параметров за пределами первых двух вообще не документирован, поэтому я не думаю, что есть какие-либо гарантии, что он не сломается в будущей версии. - person zwol; 09.05.2014