2017-01-12 10 views
0

0(開始)から5(最終日)までの曜日のシーケンスがあります。N回繰り返すリストを作成したいと考えています。ここで、Nは合計日数、R最大値を1ずつ減らすシーケンスを繰り返す

0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0 
:この場合には、6日間(0,1,2,3,4,5)であり、各連続反復そこで出力がなければならない1

によってベクトルの長さを減少させるべきです

私は試しました

for(i in 5:0){ 
i<-seq(from=0,to=i,by=1) 
print(i) 
} 

この印刷物は

0 1 2 3 4 5 
0 1 2 3 4 
0 1 2 3 
0 1 2 
0 1 
0 

どのように出力をベクトルに書き込むことができますか?私はlistItems変数を0として割り当てようとしましたが、listItems [i] < - seqコードを使用しましたが、forループシーケンスの最後の値は0になります。

私は)

答えて

1

次のようにそれを行うための最も抽象的な方法は次のとおりです。

days <- 0:5 
days_decrement <- lapply(rev(seq_along(days)), head, x=days) 
days_decrement 
# [[1]] 
# [1] 0 1 2 3 4 5 
# 
# [[2]] 
# [1] 0 1 2 3 4 
# 
# [[3]] 
# [1] 0 1 2 3 
# 
# [[4]] 
# [1] 0 1 2 
# 
# [[5]] 
# [1] 0 1 
# 
# [[6]] 
# [1] 0 

rev(seq_along(days)は、各反復の最後のインデックスのベクトルを作成し、headと、それ以上のlapply繰り返し処理は、最初の要素の必要数を抽出します。番号iの反復はdays_decrement[[i]]でアクセスできます。

このアプローチは一般的であり、データが行に格納されている場合(rev(seq_along(days)rev(seq_len(nrow(days)))に変更する必要がありますが)、データフレームと行列で処理できます。

+0

すべての回答が非常に良かったので、evgeniCの回答にいくつか追加すると、別の難点への回答が得られました。 – user3674993

0

ベクトルはエントリごとに1つの要素しか持てません。ベクトルを1つのエントリに割り当てる場合は、リストを使用することをお勧めします。

一つのアプローチは、次のようになります。

retList <- list() 
for (i in 5:0) { 
    res <- 0:i 
    retList <- append(retList, list(res)) 
} 
retList 
# [[1]] 
# [1] 0 1 2 3 4 5 
# 
# [[2]] 
# [1] 0 1 2 3 4 
# 
# [[3]] 
# [1] 0 1 2 3 
# 
# [[4]] 
# [1] 0 1 2 
# 
# [[5]] 
# [1] 0 1 
# 
# [[6]] 
# [1] 0 

# or access a part 
retList[[2]] 
# [1] 0 1 2 3 4 

んが何をしたいあなたを与えること?

0

私たちは、私は、これはトリックを行うだろうと思いsequence

sequence(6:1)-1 
#[1] 0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0 
0

...要するに

unlist(lapply(5:0, seq, from = 0)) 

が、これはのtoパラメータにc(5,4,3,2,1,0)の各値を渡すためにlapply()を使用して使用することができますseq()fromパラメータを0に保ちます。結果はリストにあり、したがってunlist()です。

関連する問題