从外部文件加载函数而没有副作用的最佳方法

时间:2012-06-26 08:27:55

标签: r

我需要从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变量。

你认为这有什么缺点吗? 还有更好的方法吗?

提前致谢

1 个答案:

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