2012-06-26 1 views
0

extern 파일에서 사용자 지정 함수를로드해야하지만 부작용이 발생하지 않아야합니다.부작용없이 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

사용자 지정 환경으로 가져 오기하여 개체 덮어 쓰기를 방지 할 수 있습니다. –

+0

@ RomanLuštrik : 정교하게 주시겠습니까? 그것은 내 솔루션과 많이 다른가요? – digEmAll

답변

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 
+0

그건 아마 더 나은/청소기 :) 감사합니다 – digEmAll