externファイルからカスタム関数をロードする必要がありますが、副作用は発生しません。
現在、私はこのようにやっています:
src <- "function(x,y) { return(x + y) }"
# parse the source
ptree <- parse(text=src)
# execute the evaluation using a data.frame as environment (like a sandbox)
f <- eval(ptree, envir=data.frame())
if(!is.function(f))
stop('The given source does not contain a valid function')
f(1,1)
このように、「悪意のある」コードは現在の環境に影響を与えません。
src <- "a <- 1"
したがって、既存の"a"
変数は関数によって変更されませんeval
。
これに欠点はありますか?
より良い方法はありますか?
前もって感謝します