Rのデモ用の関数
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
[[RjpWiki]]
初級Q&Aで講義でのデモ用の工夫を質問(2012-04-15)したものですが,他の方にも参考になると思い,以下にメモしておきます.こうしたデモは,聴衆の理解度や講義内容により,当然ふさわしいやり方が変わってきますが,私の場合,Rの全くの初心者に,パソコンにつないだプロジェクターからスクリーンに実行画面を投影しながら,使い方を学ばせる,という状況を考えています.というわけで,(1) 学生の気が散らないよう画面にはR端末以外の余計なものをできるだけ出さない(学生は結構関係ない部分に気を取られがちです),(2) 操作はできるだけ簡単にしたい(教師たるもの学生に背を向けっぱなしやPCばかり見ているのはNGです),(3) 編集の手間を避けるため,ソースファイル以外は使いたくない(一学期分の内容を作るのは結構大変です),(4) 可能な限り実際の実行過程に近づける(特に実行結果を予め見せない),が希望でした.
以下の方法は,初級Q&Aへの質問に対し匿名氏から教えていただいた(感謝!)方法を少し弄ったもので,ほぼ私の希望を満たしています.この方法はアドオンパッケージ evaluate にある関数 evaluate と replay 関数を使い,ソースファイルを予め命令単位に解釈実行した結果をリストにまとめ,それを改めて擬似的に実行しているように見せかけています.したがって擬似実行中に作られたオブジェクトは保存されません.当然,途中でアドリブ的に追加実行は出来ません.元に戻ることも出来ませんが,端末がスクロールを許せば見かけ上元に戻すことはできます.コメント及びコメント行もそのまま表示されます.
使い方は,Rのソースファイルを abc.R とすると
Demo("abc.R")
を実行し,あとはキャリッジ・リターンを押すだけで,次々命令(複数行命令可)とその結果が表示されていきます.作図結果も擬似実行表示されます.コメントとコメント行も表示されます.
Demo2 関数は Demo 関数ではステップごとに必ず入る空白行を表示させないバージョンですが,作図関数等ではやはり余分な空白行が入ります(この点を含めまだ改良の余地).
最初の評価実行の段階は,結構時間がかかる場合があります.その時は,予め評価実行結果を別個に作っておくことが考えられます.こうすれば,講義時間内では終了しないようなコードのデモも簡単になります.
abc.demo <- DemoAux("abc.R") # 評価実行結果リストを先ず作る
Demo0(abc.demo) # もしくは Demo20(abc.demo)
デモ用の工夫としては他にも初級Q&Aで挙げられた,
(1) 実行ログファイルを編集した結果をエディターでスクロールしながら見せる
(当然作図結果は見せられない),
(2) Rと連動したエディタからソースファイルを命令単位に実行する,
(3) debug 機能の利用,
等が考えられます.R のアドオン・パッケージを探しましたが,適当なものは見つけられませんでした.これ以外にも,何か良い工夫があれば是非教えてください.
以下が,私が使うことにしたデモ用関数(ページ下にソースファイルを添付しました)です.
# ソースファイルを擬似的に実行するデモ用の関数
# キャリッジリターンを押すたびに一命令ずつ実行し,結果を表示する
# 作図結果もその都度表示できる
Demo <- function(x){
require(evaluate)
xx <- evaluate(file(x))
tmp <- function(y){replay(y);invisible(readline())}
invisible(lapply(xx, tmp))
}
# ソースファイルを擬似的に実行するデモ用の関数
# キャリッジリターンを押すたびに一命令ずつ実行する
# 一部の命令(作図命令等)を除き,Demo 関数で毎回入る空白行が無い
# (解釈実行結果に入る改行文字を取り除いています
# 副作用でプロンプト部分が消えてしまうので,補っています)
Demo2 <- function(x){
require(evaluate)
xx <- evaluate(file(x))
tmp <- function(y){
yy <- y
z <- substr(yy,1,nchar(yy)-1)
if(class(yy)[1] == "source") yy <- paste("> ", z, sep="")
else if(class(yy)[1] == "character") yy <- z
replay(yy)
invisible(readline())}
invisible(lapply(xx, tmp))
}
# 最初にソースファイルを評価した結果をリストに変換する関数
# ソースファイルの評価に時間がかかる場合,先に評価結果を得ておく
# 講義時間内では終わらないような時間のかかるデモも可能
DemoAux <- function (x) {require(evaluate); evaluate(file(x))}
# Demo(x) は Demo0(DemoAux(x)) と同じ
Demo0 <- function(x){
require(evaluate)
tmp <- function(y){replay(y);invisible(readline())}
invisible(lapply(x, tmp))
}
# Demo2(x) は Demo20(DemoAux(x)) と同じ
Demo20 <- function(x) {
require(evaluate)
tmp <- function(y){
yy <- y
z <- substr(yy,1,nchar(yy)-1)
if(class(yy)[1] == "source") yy <- paste("> ", z, sep="")
else if(class(yy)[1] == "character") yy <- z
replay(yy)
invisible(readline())}
invisible(lapply(x, tmp))
}
以下が実行結果の見本です.
> Demo("L1.R")
> ### R のデータタイプ
> x <-1 # 数値(倍精度実数)
> x
[1] 1
> (x <- 1) # 付値と結果の表示を同時に行う
[1] 1
> Demo2("L1.R")
> ### R のデータタイプ
> x <-1 # 数値(倍精度実数)
> x
[1] 1
> (x <- 1) # 付値と結果の表示を同時に行う
[1] 1
#comment
終了行:
[[RjpWiki]]
初級Q&Aで講義でのデモ用の工夫を質問(2012-04-15)したものですが,他の方にも参考になると思い,以下にメモしておきます.こうしたデモは,聴衆の理解度や講義内容により,当然ふさわしいやり方が変わってきますが,私の場合,Rの全くの初心者に,パソコンにつないだプロジェクターからスクリーンに実行画面を投影しながら,使い方を学ばせる,という状況を考えています.というわけで,(1) 学生の気が散らないよう画面にはR端末以外の余計なものをできるだけ出さない(学生は結構関係ない部分に気を取られがちです),(2) 操作はできるだけ簡単にしたい(教師たるもの学生に背を向けっぱなしやPCばかり見ているのはNGです),(3) 編集の手間を避けるため,ソースファイル以外は使いたくない(一学期分の内容を作るのは結構大変です),(4) 可能な限り実際の実行過程に近づける(特に実行結果を予め見せない),が希望でした.
以下の方法は,初級Q&Aへの質問に対し匿名氏から教えていただいた(感謝!)方法を少し弄ったもので,ほぼ私の希望を満たしています.この方法はアドオンパッケージ evaluate にある関数 evaluate と replay 関数を使い,ソースファイルを予め命令単位に解釈実行した結果をリストにまとめ,それを改めて擬似的に実行しているように見せかけています.したがって擬似実行中に作られたオブジェクトは保存されません.当然,途中でアドリブ的に追加実行は出来ません.元に戻ることも出来ませんが,端末がスクロールを許せば見かけ上元に戻すことはできます.コメント及びコメント行もそのまま表示されます.
使い方は,Rのソースファイルを abc.R とすると
Demo("abc.R")
を実行し,あとはキャリッジ・リターンを押すだけで,次々命令(複数行命令可)とその結果が表示されていきます.作図結果も擬似実行表示されます.コメントとコメント行も表示されます.
Demo2 関数は Demo 関数ではステップごとに必ず入る空白行を表示させないバージョンですが,作図関数等ではやはり余分な空白行が入ります(この点を含めまだ改良の余地).
最初の評価実行の段階は,結構時間がかかる場合があります.その時は,予め評価実行結果を別個に作っておくことが考えられます.こうすれば,講義時間内では終了しないようなコードのデモも簡単になります.
abc.demo <- DemoAux("abc.R") # 評価実行結果リストを先ず作る
Demo0(abc.demo) # もしくは Demo20(abc.demo)
デモ用の工夫としては他にも初級Q&Aで挙げられた,
(1) 実行ログファイルを編集した結果をエディターでスクロールしながら見せる
(当然作図結果は見せられない),
(2) Rと連動したエディタからソースファイルを命令単位に実行する,
(3) debug 機能の利用,
等が考えられます.R のアドオン・パッケージを探しましたが,適当なものは見つけられませんでした.これ以外にも,何か良い工夫があれば是非教えてください.
以下が,私が使うことにしたデモ用関数(ページ下にソースファイルを添付しました)です.
# ソースファイルを擬似的に実行するデモ用の関数
# キャリッジリターンを押すたびに一命令ずつ実行し,結果を表示する
# 作図結果もその都度表示できる
Demo <- function(x){
require(evaluate)
xx <- evaluate(file(x))
tmp <- function(y){replay(y);invisible(readline())}
invisible(lapply(xx, tmp))
}
# ソースファイルを擬似的に実行するデモ用の関数
# キャリッジリターンを押すたびに一命令ずつ実行する
# 一部の命令(作図命令等)を除き,Demo 関数で毎回入る空白行が無い
# (解釈実行結果に入る改行文字を取り除いています
# 副作用でプロンプト部分が消えてしまうので,補っています)
Demo2 <- function(x){
require(evaluate)
xx <- evaluate(file(x))
tmp <- function(y){
yy <- y
z <- substr(yy,1,nchar(yy)-1)
if(class(yy)[1] == "source") yy <- paste("> ", z, sep="")
else if(class(yy)[1] == "character") yy <- z
replay(yy)
invisible(readline())}
invisible(lapply(xx, tmp))
}
# 最初にソースファイルを評価した結果をリストに変換する関数
# ソースファイルの評価に時間がかかる場合,先に評価結果を得ておく
# 講義時間内では終わらないような時間のかかるデモも可能
DemoAux <- function (x) {require(evaluate); evaluate(file(x))}
# Demo(x) は Demo0(DemoAux(x)) と同じ
Demo0 <- function(x){
require(evaluate)
tmp <- function(y){replay(y);invisible(readline())}
invisible(lapply(x, tmp))
}
# Demo2(x) は Demo20(DemoAux(x)) と同じ
Demo20 <- function(x) {
require(evaluate)
tmp <- function(y){
yy <- y
z <- substr(yy,1,nchar(yy)-1)
if(class(yy)[1] == "source") yy <- paste("> ", z, sep="")
else if(class(yy)[1] == "character") yy <- z
replay(yy)
invisible(readline())}
invisible(lapply(x, tmp))
}
以下が実行結果の見本です.
> Demo("L1.R")
> ### R のデータタイプ
> x <-1 # 数値(倍精度実数)
> x
[1] 1
> (x <- 1) # 付値と結果の表示を同時に行う
[1] 1
> Demo2("L1.R")
> ### R のデータタイプ
> x <-1 # 数値(倍精度実数)
> x
[1] 1
> (x <- 1) # 付値と結果の表示を同時に行う
[1] 1
#comment
ページ名: