2013-10-11 3 views
8

В основном я хочу, чтобы сформировать последовательность, скажем:Генерация последовательности как 112123123412345

п 2, то последовательность будет 112
п 3, последовательность 112123
п 5, последовательность 112123123412345

Я придумал решение

n=5 
seq=1 
for (i in 2:n){ 
    seq=c(seq,rep(1:n,len=i)) 
} 

мне интересно, если есть способ, может сделать это без для цикла?

ответ

18

Использование sequence:

> sequence(1:5) 
[1] 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 
+8

Существует также кое-что, что несколько удовлетворяет при выполнении последовательности (последовательность (5)) ':-) – flodel

+0

@flodel: Мне это нравится! –

+4

@Chris: обязательно прочитайте разделы «См. Также» в файлах справки. '? seq' упоминает« последовательность ». –

7

Вот одна возможность:

n<-5 
unlist(lapply(1:n,function(x) 1:x)) 
## [1] 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 
+2

более функциональным, будет 'unlist (lapply (сл (п), далее))' – flodel

+1

+ 1, так как 'sequence' определяется как функция' (nvec) unlist (lapply (nvec, seq_len)) '. –

+0

Спасибо большое, ребята! Хотя этот вопрос может быть решён с помощью sequence(), на самом деле это вопрос из моей учебной практики, спрашивающий, как сделать что-то, используя lapply() вместо цикла, я думаю, что это то, что ищет учебный вопрос. –

4

Было бы сделать что-то вроде:

do.call('c', sapply(1:5, seq, from = 1)) 
# [1] 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 
1

я неправильно вопрос, как «как произвести, что раздражающая головоломная последовательность ", которая идет 1,11,21,1112,3112, ... :-). Поэтому я подумал, что могу написать решение.

puzseq<-function(seqlen) { 
theseq<- list(1) 
for(j in 2:seqlen) { 

thetab<-table(theseq[[j-1]]) 
theseq[[j]]<-unlist(sapply(1:length(thetab), function(k) c(thetab[k], as.numeric(names(thetab)[k])))) 
} 
return(theseq) 
} 
+1

Трудно читать; форматирование кода не является стандартным и несовместимым. –

+0

@ ClaytonStanley вы могли бы уточнить, что вы считаете неясным? Это лучше, чем отсутствие отступов для содержимого контура! –

Смежные вопросы