Rで解析:連続処理に便利です。「規則的な変数名に値を代入」と「文字列でRに命令」する方法

Rの解析に役に立つ記事
スポンサーリンク

“assignコマンド”を利用した「規則的に変数名(オブジェクト)を作成し値(データ)を代入する方法」と”eval(parse(text = “命令内容”))コマンド”を利用した「文字列(例えば”TEST”のようにダブルクォーテーションで囲った文字)でRに命令する方法」を紹介します。forコマンドなどの繰り返し処理時に役に立つのではと思います。

コマンドはR version 3.4.2で確認しています。なお、新たなパッケージのインストールは必要ありません。

スポンサーリンク

規則的に変数名を作成し値を代入する方法

“assignコマンド”を利用しています。ベクトルとデータフレームの作成を紹介します。詳細はコメントを確認してください。なお、データは”sample関数”で作成していますので実行のたびに内容が異なります。

#ベクトルの作成
#Test1から5のオブジェクトを作成しデータを代入
for( i in seq(5)){

 assign(paste("Test", i, sep = ""),
        sample(10:100, size = 10, replace = TRUE),
        env = .GlobalEnv)

}

#もちろん、データフレームも可能です
#TestDF1から5のオブジェクトを作成しデータを代入
for( i in seq(5)){

  assign(paste("TestDF", i, sep = ""),
         data.frame(TEST1 = sample(10:100, size = 10, replace = TRUE),
                    TEST2 = sample(200:300, size = 10, replace = TRUE)),
         env = .GlobalEnv)

}

文字列でRに命令する方法

“eval(parse(text = “命令内容”))コマンド”を利用しています。データ内容の表示と散布図の出力例を紹介します。なお、データは「規則的に変数名を作成し値を代入する方法」で作成したものです。

紹介しませんが、処理に時間がかかる時は、処理速度が速い”eval(substitute(do.call()))コマンド”の利用を検討してはいかがでしょう。

#eval(parse(text = "命令内容"))コマンド
#作成したTest1からの内容をcatコマンドを使用してラベルを付けて表示する
for( i in seq(5)){

  cat(eval(parse(text = paste("Test", i, sep = ""))),
      labels = paste("Test", i, ":", sep = ""), fill = TRUE)

}
Test1: 23 48 81 18 74 59 75 49 54 14
Test2: 28 35 16 66 29 79 88 66 58 67
Test3: 61 70 88 22 27 17 58 34 87 16
Test4: 86 77 60 41 47 73 57 41 10 43
Test5: 51 63 45 25 46 65 43 23 67 88

#TestDF1から5を散布図でプロット
layout(matrix(seq(5), rep(1, 5)), 1, 5)
ColSet <- c("#d9bb9c", "#4b61ba", "#deb7a0", "#a87963", "#28231e")
for( i in seq(5)){
  
  plot(eval(parse(text = paste("TestDF", i, "[, 1]", sep = ""))),
       eval(parse(text = paste("TestDF", i, "[, 2]", sep = ""))),
       xlab = "", ylab = "", main = paste("TestDF", i, sep = ""),
       col = ColSet[i], pch = 15, cex = 4)
}

散布図の出力例

Rplot

少しでも、あなたのウェブや実験の解析が楽になりますように!!

タイトルとURLをコピーしました