R言語

R言語 ベクトルやリストの操作 appendやinsertを導入する【自作関数】

  1. HOME >
  2. R言語 >

R言語 ベクトルやリストの操作 appendやinsertを導入する【自作関数】

スポンサーリンク

こんにちは、usagi-sanです。

今回は、R言語のベクトルやリストの操作を紹介していきます。

Rでは、ベクトルやリストなどのオブジェクトがありますが、これらのオブジェクトには他の言語に存在するメソッド(append、insert、removeなど)が存在しません。

特にリストのインデックスや要素数を取得する際、手間がかかります。

そんな手間を無くすために、他の言語で実装されているメソッドをR言語で行う方法を解説していきます。

また、リストなどのオブジェクトに対する関数(append、insert、removeなどの関数)をRで実装しました。

Rでデータ解析を始めるならコレ
¥3,300 (2022/06/01 17:20時点 | Amazon調べ)

こんな方におすすめ

  • ベクトルやリストの操作に困っている
  • 挿入や削除したいけど、便利な関数が見当たらない
  • ベクトルやリストの操作のテンプレが欲しい

ベクトルとリストの操作方法については次の記事で学べます。

【R言語】ベクトルの操作 作成・値の代入・要素の追加など

R言語のベクトルの操作(作成や参照、代入、要素の追加など)をまとめました。 この記事では以下のベクトルに関する操作を実行例付きで分かりやすく解説しています。 この記事で学べる事 ベクトルの作成 ベクト ...

続きを見る

【R言語】リストの操作 作成・値の代入・要素の追加など

R言語のリストの操作(作成や値の代入、要素の追加など)をまとめました。 この記事では以下のリストに関する操作を実行例とともに分かりやすく解説しています。 この記事で学べる事 リストの作成 リストの参照 ...

続きを見る

ベクトル・リストの操作一覧

他の言語に実装されているAppend、Extend、Insert、Remove、Pop、Index、Countの実行方法についてまとめました。

是非コピペして使ってください。

Append

2つのベクトル及びリストを連結させる方法について紹介します。Rにはappendという関数がありますが、リストに対しては少々不便です。そんなappendを使いやすくしてみました。

次の関数は、ベクトルとリストの両方に対してAppendを行うことができる関数です。

ポイント

8行目でc(a, b)を用いて、引数xとitemの結合を行っています。 また、xがリストの場合、6行目でitemをリスト化することでベクトルであるitemの全ての要素が順にxの要素として結合されるのを防ぎます。

関数append_vecOrListの引数を以下に示します。

関数append_vecOrListの引数
xベクトルまたはリスト型のオブジェクト
itemxに結合させるベクトルまたはリスト型のオフジェクト

いくつか実行例を紹介します。

append_vecOrLIstを用いると、次のようにベクトルやリストを結合させることができます。

ベクトルにベクトルを結合させるときは、c(1, 2, 3, 4, 5, 6, 7)のように連結されますが、リストにベクトルを追加するときは最後の要素にc(6, 7, 8)という一つの要素が追加されます。

Extend

次に、ベクトルやリストを延長させる方法を紹介します。上のAppendとの違いは、あるリストに対してベクトルやリストを延長する際に、その要素が順に結合される点です。これに関しては、実行例で説明していきます。

次の関数を用いることで、ベクトルやリストをExtendすることができます。

ポイント

5行目のように、c(a, b)を行うことで、aとbのオブジェクトを繋げることが来ます。 また、append_vecOrListのように、xがリストのときにitemをリスト化していないため、次で示す実行例のようにベクトルやリストの要素が順にxに加わります。

関数extend_vecOrListの引数を以下に示します。

関数append_vecOrListの引数
xベクトルまたはリスト型のオブジェクト
itemxに併合させるベクトルまたはリスト型のオフジェクト

実行例を以下に示します。

ベクトルに対する操作は、append_vecOrListと全く同じですが、リストにベクトルやリストを併合させる場合、すべての要素が順に加わります。as.list(c(1, 2, 3, 4)), c(5, 6, 7)を併合させると、1から7の要素が1つずつ格納されたリストを取得することができます。

Insert

ベクトルやリストに対するInsertの方法について紹介します。ベクトルやリストの操作の際に、特定の位置にオブジェクトを追加したい場合があると思います。このような場合、Insertを用いるのが便利です。

次の関数を用いることで、Insertを行うことができます。

ポイント

8行目でc(x[seq_len(i - 1)], item, x[i : length(x)])を行うことで、xのi番目の位置にitemを挿入することができます。

関数insert_vecOrListの引数を以下に示します。

関数insert_vecOrListの引数
xベクトルまたはリスト型のオブジェクト
ixにitemを挿入するインデックス
itemxに挿入する要素

実行例を以下に示します。

上の実行例のように指定したインデックス(例では3番目)にitemが挿入されているのが分かります。

ベクトルに対しては、xの3番目の要素の前に連続するようにitemの各要素が挿入されます。

リストに対しては、3番目の要素の前にitemが挿入されます。3つ目の例のように、リストにベクトルを挿入すると、3番目の要素にベクトルc(10, 11, 12)が挿入されているのが分かります。

Remove

ベクトルやリストに対して、Removeを行う方法を紹介します。ベクトルやリストのある要素を削除したい場合、Removeが必要になってくると思います。

Rにおいて、Removeは次のように作ることができます。

ポイント

2行目で、引数itemのインデックスを取得し、3行目でインデックス以外を返しRemoveを行っています。

関数remove_vecOrListの引数を以下に示します。

関数insert_vecOrListの引数
xベクトルまたはリスト型のオブジェクト
itemxから削除する要素

実行例を以下に示します。

ベクトルやリスト中の特定の要素に一致する要素を削除することができます。

また2つ目の例のように、list(1, 2, 3, c(4, 5))のようなベクトルを要素に持つリストに対しても、c(4, 5)というベクトルを削除することができます。

Pop

Popを行う方法を紹介します。Popは、ベクトルやリストのi番目のインデックスの要素を除いたベクトルまたはリストと、i番目の要素を取得したい場合に用います。

以下のように関数を与えることで、RでPopを行うことができます。

ポイント

9行目の c(x[seq_len(i - 1)], x[(i + 1) : length(x)])を用いて、i番目を除いたベクトルまたはリストを取得することができます。

関数pop_vecOrListの引数を以下に示します。

関数pop_vecOrListの引数
xベクトルまたはリスト型のオブジェクト
ixから除きたい要素のインデックス

この間数の実行例を以下に示します。

指定したインデックスの要素とその要素を除いたオブジェクトを返しているのが分かります。poppedXにはi番目の要素を除いたオブジェクト、xiにi番目の要素が格納されます。

Index

次に、ベクトルやリスト中のある要素のインデックスを取得する方法について解説します。ある列名に対応する番号を取得するときに、Indexが必要になります。

Rにおいて、Indexは次のように表現することができます。

ポイント

5行目から10行目にかけて、リストに対するインデックスの取得、11行目から最後にかけてベクトルに対するインデックスの取得を行っています。 ベクトルに対しては、names(x) <- seq_len(length(x))により、各要素の名前をインデックスに変更した後に、itemと同じ要素であるas.numeric(names(x[x == item]))を返すことにより、Indexを実現できます。 一方リストに対しては、lapplyなどを用いて、要素と等しいかを判定する必要があります。

getIndexの引数を以下に示します。

関数getIndexの引数
xベクトルまたはリスト型のオブジェクト
itemインデックスを取得するxの要素

実行例を以下に示します。

ベクトルやリストに対してitemのインデックスを取得できているのが分かります。

2つ目の実行例のように複数のインデックスにも対応しています。

また、3つ目の実行例のようにlist(1, 2, 3, c(4, 5))中のc(4, 5)のインデックスも適切に取得できます。

Count

最後に、Countを実装する方法を解説します。ある要素がベクトルやリスト中に何個あるかを知りたいときに、Countが必要になります。

次のように、Countは先ほどのIndexを用いて表現することが可能です。

ポイント

itemのインデックスの数である length(getIndex(x, item))を返すことによって、ベクトルやリスト中のitemの数を取得することができます。

getCountの引数を次に示します。

関数getCountの引数
xベクトルまたはリスト型のオブジェクト。
itemx中の要素。itemに一致するx中の要素数を返す。

実行例を以下に示します。

ベクトルやリスト中のitemの個数を適切に取得できているのが分かります。

ダウンロード方法

上で紹介した関数は次の記事に書いてあるパッケージUsagiSanをインストールすることで使うことができます。

R言語 自作パッケージ UsagiSan

こんにちは、usagi-sanです。 R言語の自作パッケージを紹介します。 統計解析のアルバイトをしている中、暇な時間を見つけて自分でパッケージを作ってみました。 Rのパッケージには、統計解析用のパッ ...

続きを見る

また、次のダウンロードリンクから今回紹介した関数を含むスクリプトファイルをダウンロードすることもできます。

テンプレなどで使ってもらえると幸いです。

まとめ

R言語でベクトルやリストの操作を拡張してみました。

標準の環境では、ベクトルやリスト内の要素の個数やインデックスを取得する関数は実装されていません。Rを使っっている人なら誰でもベクトルやリストの操作が不便だな~と感じていると思います。

そんな方のために、ベクトルやリストのよく使う操作をまとめました。

スポンサーリンク

  • この記事を書いた人
  • 最新記事

usagi-san

統計学とゲームとかをメインに解説していくよ。 数式とかプログラミングコードにミスがあったり質問があったりする場合はコメントで受け付けます。すぐに対応します。

-R言語
-,