我需要从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
变量。
你认为这有什么缺点吗? 还有更好的方法吗?
提前致谢
答案 0 :(得分: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