Rで解析:文字列で処理を実行「eply」パッケージ


作成したfunctionに文字列で用意した処理内容を実行するコマンドが収録されたパッケージの紹介です。

処理コマンドはdataframeで用意します。その際にはfunctionで用意した変数の値を設定できるので非常に有用だと考えます。また、パッケージにはコマンドを文字列に変換するstringsコマンドが収録されています。evalsコマンドも面白いので試してみてください。

文字列で処理を実行するコマンドにはeval(parse(text = “コマンド”))がありますが、非常に面白いパッケージだと思います。

パッケージバージョンは0.1.0。windows 10のR version 3.3.2で動作を確認しています。

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("eply")

実行コマンドの紹介

詳細はコマンド、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("eply")

###データ例の作成#####
n <- 30
TestData <- data.frame(Group = sample(paste0("Group", 1:5), n, replace = TRUE),
                       Data1 = rnorm(n),
                       Data2 = rnorm(n) + rnorm(n) + rnorm(n),
                       Data3 = sample(0:1, n, replace = TRUE),
                       Data4 = sample(LETTERS[1:26], n, replace = TRUE))
#######

###まずはfunctionを作成#####
FUNTEST <- function(x, y){
  
  a <- round(mean(x) / y, 2)
  b <- round(mean(x) * y, 2)
  paste(a, b, sep = ", ")

}
########

###文字列で処理内容を記述#####
#dataframeで記述
#エクセルで作成し取り込むのが無難かも
#コマンドを文字列に変換:stringsコマンド
EvalTest <- data.frame(x = c(strings(sum(subset(TestData, Data4 == "B", Data1))),
                             strings(sum(subset(TestData, Data4 == "B", Data1))),
                             strings(sum(subset(TestData, Data4 == "F", Data1))),
                             strings(sum(subset(TestData, Data4 == "F", Data1)))),
                       y = c("a", "b", "a", "b"))
########

###a, bに値を設定#####
a <- 1
b <- 2
########

#functionを処理内容で実行:eplyコマンド
#functionを設定:.funオプション
#処理内容を設定:.exprオプション
Result <- eply(.fun = FUNTEST, EvalTest)
#classの確認
class(Result)
[1] "character"
#内容確認
#2,4は1,3の.5と2を掛けた値になる
Result
           1             2             3             4 
"1.68, 1.68"  "0.84, 3.36"  "-0.9, -0.9" "-0.45, -1.8"

#文字をコマンド処理:evalsコマンド
evals(c("1+1", "2*2", "30/3"))
1+1  2*2 30/3 
2    4   10
evals(c("subset(TestData, Data4 == 'B')", "TestData[1:2, 1:2]"))
$`subset(TestData, Data4 == 'B')`
    Group     Data1     Data2 Data3 Data4
16 Group4 0.1114035 -0.685764     0     B
27 Group1 0.4935652  2.785748     0     B

$`TestData[1:2, 1:2]`
   Group      Data1
1 Group5 -0.2678891
2 Group5  0.3199990

あなたの解析がとっても楽になりますように!!

スポンサードリンク

関連コンテンツ


スポンサードリンク