いくつかの関数を含むファイル「myfuncs.R」があるとします。
A <- function(x) x
B <- function(y) y
C <- function(z) z
「myfuncs.R」に含まれるすべての関数を、適切な名前の独自のファイルに配置したいと考えています。関数を抽出して別のファイルに配置する単純な Bash シェル スクリプトがあります。
split -p "function\(" myfuncs.R tmpfunc
grep "function(" tmpfunc* | awk '{
# strip first-instances of function assignment
sub("<-", " ")
sub("=", " ")
sub(":", " ") # and colon introduced by grep
mv=$1
mvto=sprintf("func_%s.R",$2)
print "mv", mv, mvto
}' | sh
私に残して:
func_A.R
func_B.R
func_C.R
ただし、このスクリプトには明らかな制限があります。たとえば、関数 'A' にネストされた関数がある場合、誤動作します。
A <- function(x){
Aa <- function(x){x}
return(Aa)
}
関数全体が1行にある場合、完全に失敗します。
これを行うための、より堅牢でエラーが発生しにくい方法を知っている人はいますか?