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))
#######

###&#12414;&#12378;&#12399;function&#12434;&#20316;&#25104;#####
FUNTEST <- function(x, y){
  
  a <- round(mean(x) / y, 2)
  b <- round(mean(x) * y, 2)
  paste(a, b, sep = ", ")
  
}
########

###&#25991;&#23383;&#21015;&#12391;&#20966;&#29702;&#20869;&#23481;&#12434;&#35352;&#36848;#####
#dataframe&#12391;&#35352;&#36848;
#&#12456;&#12463;&#12475;&#12523;&#12391;&#20316;&#25104;&#12375;&#21462;&#12426;&#36796;&#12416;&#12398;&#12364;&#28961;&#38627;&#12363;&#12418;
#&#12467;&#12510;&#12531;&#12489;&#12434;&#25991;&#23383;&#21015;&#12395;&#22793;&#25563;:strings&#12467;&#12510;&#12531;&#12489;
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&#12395;&#20516;&#12434;&#35373;&#23450;#####
a <- 1
b <- 2
########

#function&#12434;&#20966;&#29702;&#20869;&#23481;&#12391;&#23455;&#34892;:eply&#12467;&#12510;&#12531;&#12489;
#function&#12434;&#35373;&#23450;:.fun&#12458;&#12503;&#12471;&#12519;&#12531;
#&#20966;&#29702;&#20869;&#23481;&#12434;&#35373;&#23450;:.expr&#12458;&#12503;&#12471;&#12519;&#12531;
Result <- eply(.fun = FUNTEST, EvalTest)
#class&#12398;&#30906;&#35469;
class(Result)
[1] "character"

#&#20869;&#23481;&#30906;&#35469;
#2,4&#12399;1,3&#12398;.5&#12392;2&#12434;&#25499;&#12369;&#12383;&#20516;&#12395;&#12394;&#12427;
Result
1              2              3              4 
"-2.97, -2.97" "-1.49, -5.94" "-3.65, -3.65" "-1.83, -7.31" 

#&#25991;&#23383;&#12434;&#12467;&#12510;&#12531;&#12489;&#20966;&#29702;:evals&#12467;&#12510;&#12531;&#12489;
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をコピーしました