Rでfor文を使って処理した結果を新しいベクトルに追加

Rでfor文を使って処理した結果を新しいベクトルに追加するのに躓いたので書き留めておきます。わかりやすくするためにいろいろ寄り道するように書いてあります。

今回はfor文を使ってvctという変数に対して各要素に2倍した値を新しいベクトルに追加してみたいと思います。

※ for文を使わなくてもできますが、目的がfor文を理解するために内容が簡単なものをあえて使用しています

※ Jupyter notebookで行っているためもしかしたらRStudioだとエラーが発生するところがあるかもしれません

Rでfor文を書く

for文は繰り返し処理をするときに使います。今回は繰り返しの範囲はベクトルを使います。他にも数字で範囲を指定・リストを使うなどがあると思います。

まずは、ベクトルを作りたいと思います。

# 中身に意味はなく適当です
vct <- c(2, 5, 6, 7)

for文を理解するための寄り道として、変数vctの中身を一つずつprintするコードを書いてみます。

基本的な書き方は下記です。

for (要素 in ベクトル){
    print(要素)
}

では実際に上記の変数vctの要素をprintしていきます。

# 例1
for (x in vct){
    print(x)
}
# -----------------
[1] 2
[1] 5
[1] 6
[1] 7

こんな感じでベクトルの要素を一つずつxに入れてprintすることができます。

もう一つ例を載せておきます。

# 例2
vct_name <- c("ito", "sato", "goto", "muto", "gondo")

for (name in vct_name){
    print(name)
}
# -----------------
[1] "ito"
[1] "sato"
[1] "goto"
[1] "muto"
[1] "gondo"

ベクトルに要素を追加する

ベクトルに要素を追加するにはappend()を使うことで実現できます。

上で作成したvctに10を追加する場合はこのように書きます。

vct <- append(vct,10)

vctをprintすると10が追加されているのがわかります。

print(vct)
# -----------------
[1]  2  5  6  7 10

for文を使って処理した結果をベクトルに追加

本題の「for文を使ってvctという変数に対して各要素に2倍した値を新しいベクトルに追加」をしたいと思います。

# 空のベクトルを用意
vct_2 <- c()
for (num in vct){
    # numを2倍したものをappend_numに入れる
    append_num <- num * 2
    # append_numをvct_2に追加してvct_2を上書きする
    vct_2 <- append(vct_2, append_num)
}
print(vct_2 )
# -----------------
[1]  4 10 12 14 20

まずは、処理した結果(各要素を2倍したもの)を追加していく先の空のベクトルを作成します。今回は「vct_2」という変数名の空のベクトルを作成しています。

そして、処理する前の値が入っているvctの中身をfor文で順番に出すためのコード「for (num in vct){}」を書きます。これでnumにはvctの要素が順番に入っていきます。numを2倍しているのが「num * 2」という個所になります。num * 2の結果はappend_numに入れています。

最後に新しいベクトルであるvct_2にappend_num を追加していくコードを書きます。それが「vct_2 <- append(vct_2, append_num)」の箇所になります。append()の使い方としてはappend(追加先のベクトル, 追加する要素)といった感じです。ちなみに、「vct_2 <- append(vct_2, append_num)」の「vct_2 <- 」の部分は上書き保存をするイメージです。「append(vct_2, append_num)」だけでは、vct_2に新しく要素は追加されるが上書き保存されないので、新しく要素が追加された状態のvct_2にはなりません(excelで作業して保存しないで閉じるみたいな感じです)。

上書き保存しない例はこんな感じ

append(vct_2, 100)
# -----------------
4 10 12 14 20 100

見た感じ100が追加されていそうではあるが、vct_2をprintすると100が追加されていないことがわかる。

print(vct_2)
# -----------------
[1]  4 10 12 14 20

最後に

まぁ、ぶっちゃけ各要素を2倍したものはもっと簡単に書けます。

print(vct*2)
# -----------------
[1]  4 10 12 14 20

ですが、プログラミング初学者の方などがfor文を理解しやすいようにするために今回は重視するためにfor文を使いました。