seq_along() の使用
CoddyのRジャーニー「基礎」セクションの一部 — レッスン 64/78。
要素の値とそのベクトル内での位置の両方が必要になることがあります。要素を直接反復処理するのは簡潔ですが、インデックスにアクセスすることはできません。seq_along() 関数は、任意のベクトルに対してインデックスのシーケンスを生成することで、この問題を解決します。
seq_along() 関数は、1 からベクトルの長さまでのシーケンスを返します:
fruits <- c("apple", "banana", "cherry")
print(seq_along(fruits))出力:
[1] 1 2 3これらのインデックスをループすることで、位置と値の両方にアクセスできます:
fruits <- c("apple", "banana", "cherry")
for (i in seq_along(fruits)) {
cat(i, ":", fruits[i], "\n")
}出力:
1 : apple
2 : banana
3 : cherryこのアプローチは、特定の位置にある要素を修正したり、要素を隣接するものと比較したりする必要がある場合に特に便利です。seq_along() を使用することは、1:length(vec) よりも安全です。なぜなら、空のベクトルを正しく処理し、1:0 の代わりに空のシーケンスを返すからです。
チャレンジ
簡単カンマ区切りの数値を含む1行の入力(例:10,20,30,40,50)を受け取ります。
seq_along() を使用して、インデックスとともにベクトルを反復処理します:
- カンマ区切りの入力からベクトルを作成します
seq_along()を使用してベクトルをループし、インデックスと値の両方を取得します- 各要素について、インデックス、値、およびその時点までの累積和(位置1から現在の位置までのすべての要素の合計)を出力します
cat() を使用して、次の形式で出力してください:Position X: VALUE (Running total: TOTAL) の後に改行を入れます。
例えば、入力が以下の場合:
5,10,15,20出力は以下のようになります:
Position 1: 5 (Running total: 5)
Position 2: 10 (Running total: 15)
Position 3: 15 (Running total: 30)
Position 4: 20 (Running total: 50)説明:位置 1 では、値は 5 で累積和は 5 です。位置 2 では、値は 10 で累積和は 5+10=15 です。位置 3 では、値は 15 で累積和は 5+10+15=30 となり、以下同様です。
ヒント:位置 i までの累積和を計算するには、sum(vector[1:i]) を使用します。
チートシート
seq_along() 関数は、1からベクトルの長さまでのインデックスのシーケンスを生成します:
fruits <- c("apple", "banana", "cherry")
print(seq_along(fruits))
# 出力: [1] 1 2 3ループ内で seq_along() を使用して、インデックスと値の両方にアクセスします:
fruits <- c("apple", "banana", "cherry")
for (i in seq_along(fruits)) {
cat(i, ":", fruits[i], "\n")
}
# 出力:
# 1 : apple
# 2 : banana
# 3 : cherryseq_along() を使用することは、1:length(vec) を使用するよりも安全です。なぜなら、空のベクトルを正しく処理し、1:0 の代わりに空のシーケンスを返すからです。
自分で試してみよう
# 入力を読み込む
con <- file("stdin", "r")
input_line <- suppressWarnings(readLines(con, n = 1))
close(con)
# カンマ区切りの文字列を数値ベクトルに変換する
numbers <- as.numeric(strsplit(input_line, ",")[[1]])
# TODO: 以下にコードを記述してください
# seq_along() を使用してベクトルをループ処理してください
# 各位置について、インデックス、値、および累計を表示してください
# cat() を次の形式で使用してください: Position X: VALUE (Running total: TOTAL)\nこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。