0

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

これに欠点はありますか?
より良い方法はありますか?

前もって感謝します

4

1 に答える 1

2

関数をカスタム環境に保存できます。環境を指定することでアクセスできます。

llamegid <- new.env(parent = baseenv())
f <- function(x) x*x
src <- "function(x,y) { return(x + y) }"
assign("f", src, envir = llamegid)

f
function(x) x*x

get("f", envir = llamegid)
[1] "function(x,y) { return(x + y) }"

exists("f", envir = llamegid)
[1] TRUE
于 2012-06-26T08:36:11.113 に答える