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

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

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

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

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

パッケージバージョンは0.1.2。R version 4.2.2で動作を確認しています。

スポンサーリンク

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

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

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

実行コマンド

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

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

###データ例の作成#####
set.seed(1234)
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 
"-2.97, -2.97" "-1.49, -5.94" "-3.65, -3.65" "-1.83, -7.31" 

#文字をコマンド処理: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
10 Group4 -1.3409932  0.7327427     1     B
19 Group5 -1.1073182 -2.6030839     1     B
21 Group3 -0.5238281  1.5332875     0     B

$`TestData[1:2, 1:2]`
Group      Data1
1 Group4 -0.0151383
2 Group2 -0.9359486

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

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