2013-11-20 30 views
3

我想重複一個包含11個元素3,2和1次的矢量,並嘗試了以下尷尬的代碼,它給了我想要的東西(一個66的矢量。我該怎麼做?在一個更好的辦法重複一個矢量3,2,1時間

myd<-paste(letters[1:11]) 
mye<-rep(myd,each =3) 
myf<-rep(myd,each =2) 
myg<-rep(myd,each =1) 
myh<-c(mye,myf,myg) 

length(myh) 
[1] 66 

回答

3

我會使用sapplyunlist

dat = unlist(sapply(3:1, function(x) rep(myd, each = x))) 
all.equal(dat, myh) 
[1] TRUE 
+1

+1讓我開心,當我得到與專業人士相同的答案! – zx8754

+1

我也爲你的優秀解決方案+1了。 –

3

使用sapply

unlist(sapply(3:1,function(x)rep(myd,each=x)))

3

這不是一個真正的嚴肅的參賽者。只是想表明,paste()操作myd完全是多餘的,而且你可以從序列圖案選擇:

mye <-rep(letters[1:11], each =3) 
myh <-c(mye, mye[c(TRUE,TRUE, FALSE)] , mye[c(TRUE,FALSE, FALSE)]) 

的C(TRUE,TRUE,FALSE)和C(TRUE,FALSE,FALSE)將通過"["得到回收,以便在第一種情況下每三個項目被省略,並且在第二種情況下每三個項目被選擇。

+0

感謝所有這個優雅的代碼。雖然Paul和zx8754的代碼基本相同,但我會接受Paul的,因爲他是第一個迴應。 – Meso