0

我需要从外部文件加载自定义函数,但不会产生副作用。

目前,我正在这样做:

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 回答