HP作りました:Rの逆転項目処理関数とか。

サーバーとドメインを取ること早3ヶ月。
HPせっかく作ったので普段使ってるRの自作関数とか上げてみます。
毎回やることは関数作ってルーティン化するととても捗る気がします。
デバッグ一応したつもりですが責任は取りませんのでご了承ください。
むしろバグを教えてくだされば助かります。

MakeReverse関数

概要
逆転項目を処理する関数です。
本当にただそれだけなので、特に関数が必要ないよという方は

と書いてあげるだけで大丈夫だと思います。1~7の7件法なら(1+7)にするだけです。 -3~3 の7件法なら、(-3 + 3) です。要するに、(最小値+最大値)からデータを引いてあげると逆転できます。
2回実行しないようにだけ気をつけてください。
それが怖い方は、格納する方をdata$x1Rとかにするといいと思います。

複数の変数をまとめて逆転したい場合は、

で大丈夫だと思います。for文を使わずとも行列演算でできてしまうところがRのいいところですね。

説明・注意事項
引数はdata = データフレーム, name = 変数名(文字列), point = 何件法か
変数RevCount を使って2回以上実行防止機能をつけている。←この機能欲しさに作りました
変数名を入れると同じ変数名に逆転したものを格納します。なので、逆転前と逆転後が違う変数とかはできません。
1回の記述で5件法と7件法を同時に処理とかはできません。しかし、2回書くとRevCountで引っかかります。(2回以上使う方は関数内のifの条件を書き換えてみてください。)
スケールが1から始まるものにしか使えません。 -3 ~ 3 のスケールとかは無理です。(関数内の逆転項目の処理法を変えればできると思います。私が普段1~7 しか使わないのでこのような仕様になってます。)
返り値は逆転処理の済んだdata.frameです。なので、それを何かのdata.frameに代入する形で使ってください。そのため、大規模データでやるとPCが死にますのでご注意を。

関数コード

 

使用例

こんな擬似データを作って、

 

逆転処理

 

2回目以降は実行するとエラーを吐き出します。逆転処理を2回以上実行すると大変なことになるのでこの機能をつけています。それでも実行したい場合は、rm(RevCount)でRevCountを削除して下さい。

 

こんな感じです。多分そのうち改良されます。
ちなみに2回実行防止機能の仕様ですが、

ls(.GlovalEnv) == “RevCount” で、グローバル環境に実行回数を管理するカウント変数が存在するかを確認します。このとき、ただのls()では、関数内のオブジェクトしか確認しませんが、ls(.GlovalEnv)とすると、グローバル環境にまで確認しにいきます。
それを論理値としてtempに埋め込み、sumをとると、論理値は0,1で計算されるので、RevCountが存在すれば1になります。存在していなければつまり、sum(temp) == 0 であれば、初期値0としてRevCountを作成します。
次に、RevCountが0であれば、逆転処理が実行されます。そうでなければ逆転処理は行われません。
最後にRevCountを1回増やして終わりです。

この仕様を作るのがやや疲れました。
本当に自分のためにしか作ってないので使いづらいと思いますが、適宜改良していただけたらと思います。
他のコードも時間があれば公開していきたいと思います。

※20161006 関数を使わない逆転項目処理について追記
※20170107 1から始まらないスケールの逆転について追記

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です