eval
関数を利用することで、文字列を R のスクリプトとして実行させることができる。eval
の使用例をいくつかここに示す。
パッケージのリロード
eval
関数は与えられた文字列を R のスクリプトとして解釈する。そのため、library(package-name)
などの文字列を用意して eval 関数に与えれば、パッケージの呼び出しを行うことができる。
libs <- c("DESeq", "edgeR", "ggplot2")
eval(parse(text = paste0("library(", libs[1], ")"))) # paste0 関数で library("DESeq") 文字列を作る
eval(parse(text = paste0("library(", libs[2], ")"))) # paste0 関数で library("edgeR") 文字列を作る
eval(parse(text = paste0("library(", libs[3], ")"))) # paste0 関数で library("ggplot2") 文字列を作る
関数の実行
eval
を利用して関数を呼び出して実行する方法。
f <- function(x) {return(x * x)}
eval(parse(text = "f(10)"))
## [1] 100
eval(parse(text = "f(100)"))
## [1] 10000
データのロード
d <- "iris"
eval(parse(text = paste0("data(", d, ")")))
eval(parse(text = paste0("head(", d, ")")))
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
リスト要素の取得
eval
を利用して、リストの要素を取得する方法。
p <- list(
a = c("alpha", "beta"),
b = c(1, 3)
)
q <- list(
a = c("gamma", "delta"),
b = c(2, 4)
)
for (i in c("p", "q")) {
for (j in c("a", "b")) {
eval(parse(text = paste0("print(", i, "$", j, ")")))
}
}
## [1] "alpha" "beta"
## [1] 1 3
## [1] "gamma" "delta"
## [1] 2